diff --git a/luni/src/main/java/libcore/icu/LocaleData.java b/luni/src/main/java/libcore/icu/LocaleData.java
index 6f59257..9e07244 100644
--- a/luni/src/main/java/libcore/icu/LocaleData.java
+++ b/luni/src/main/java/libcore/icu/LocaleData.java
@@ -79,6 +79,10 @@
     public String mediumDateFormat;
     public String shortDateFormat;
 
+    // Used by TimePicker. Not currently used by UTS#35.
+    public String narrowAm; // "a".
+    public String narrowPm; // "p".
+
     // shortDateFormat, but guaranteed to have 4-digit years.
     // Used by android.text.format.DateFormat.getDateFormatStringForSetting.
     public String shortDateFormat4;
diff --git a/luni/src/main/native/libcore_icu_ICU.cpp b/luni/src/main/native/libcore_icu_ICU.cpp
index df26b39..1528a2d 100644
--- a/luni/src/main/native/libcore_icu_ICU.cpp
+++ b/luni/src/main/native/libcore_icu_ICU.cpp
@@ -450,6 +450,29 @@
   DISALLOW_COPY_AND_ASSIGN(LocaleNameIterator);
 };
 
+static bool getAmPmMarkersNarrow(JNIEnv* env, jobject localeData, const char* locale_name) {
+  UErrorCode status = U_ZERO_ERROR;
+  ScopedResourceBundle root(ures_open(NULL, locale_name, &status));
+  if (U_FAILURE(status)) {
+    return false;
+  }
+  ScopedResourceBundle calendar(ures_getByKey(root.get(), "calendar", NULL, &status));
+  if (U_FAILURE(status)) {
+    return false;
+  }
+  ScopedResourceBundle gregorian(ures_getByKey(calendar.get(), "gregorian", NULL, &status));
+  if (U_FAILURE(status)) {
+    return false;
+  }
+  ScopedResourceBundle amPmMarkersNarrow(ures_getByKey(gregorian.get(), "AmPmMarkersNarrow", NULL, &status));
+  if (U_FAILURE(status)) {
+    return false;
+  }
+  setStringField(env, localeData, "narrowAm", amPmMarkersNarrow.get(), 0);
+  setStringField(env, localeData, "narrowPm", amPmMarkersNarrow.get(), 1);
+  return true;
+}
+
 static bool getDateTimePatterns(JNIEnv* env, jobject localeData, const char* locale_name) {
   UErrorCode status = U_ZERO_ERROR;
   ScopedResourceBundle root(ures_open(NULL, locale_name, &status));
@@ -493,14 +516,14 @@
   UnicodeString today(ures_getUnicodeStringByKey(relative.get(), "0", &status));
   UnicodeString tomorrow(ures_getUnicodeStringByKey(relative.get(), "1", &status));
   if (U_FAILURE(status)) {
-    ALOGE("Error getting yesterday/today/tomorrow: %s", u_errorName(status));
+    ALOGE("Error getting yesterday/today/tomorrow for %s: %s", locale_name, u_errorName(status));
     return false;
   }
 
   // We title-case the strings so they have consistent capitalization (http://b/14493853).
   UniquePtr<BreakIterator> brk(BreakIterator::createSentenceInstance(locale, status));
   if (U_FAILURE(status)) {
-    ALOGE("Error getting yesterday/today/tomorrow break iterator: %s", u_errorName(status));
+    ALOGE("Error getting yesterday/today/tomorrow break iterator for %s: %s", locale_name, u_errorName(status));
     return false;
   }
   yesterday.toTitle(brk.get(), locale, U_TITLECASE_NO_LOWERCASE | U_TITLECASE_NO_BREAK_ADJUSTMENT);
@@ -554,6 +577,19 @@
       return JNI_FALSE;
     }
 
+    // Get the narrow "AM" and "PM" strings.
+    bool foundAmPmMarkersNarrow = false;
+    for (LocaleNameIterator it(icuLocale.locale().getBaseName(), status); it.HasNext(); it.Up()) {
+      if (getAmPmMarkersNarrow(env, localeData, it.Get())) {
+        foundAmPmMarkersNarrow = true;
+        break;
+      }
+    }
+    if (!foundAmPmMarkersNarrow) {
+      ALOGE("Couldn't find ICU AmPmMarkersNarrow for %s", languageTag.c_str());
+      return JNI_FALSE;
+    }
+
     status = U_ZERO_ERROR;
     UniquePtr<Calendar> cal(Calendar::createInstance(icuLocale.locale(), status));
     if (U_FAILURE(status)) {
diff --git a/luni/src/test/java/libcore/icu/LocaleDataTest.java b/luni/src/test/java/libcore/icu/LocaleDataTest.java
index b692f34..0a83c53 100644
--- a/luni/src/test/java/libcore/icu/LocaleDataTest.java
+++ b/luni/src/test/java/libcore/icu/LocaleDataTest.java
@@ -31,6 +31,8 @@
   public void test_en_US() throws Exception {
     LocaleData l = LocaleData.get(Locale.US);
     assertEquals("AM", l.amPm[0]);
+    assertEquals("a", l.narrowAm);
+
     assertEquals("BC", l.eras[0]);
 
     assertEquals("January", l.longMonthNames[0]);
