Loading core/java/android/text/format/DateUtils.java +34 −34 Original line number Diff line number Diff line Loading @@ -45,7 +45,6 @@ public class DateUtils private static final String FAST_FORMAT_HMMSS = "%1$d:%2$02d:%3$02d"; private static final String FAST_FORMAT_MMSS = "%1$02d:%2$02d"; private static final char TIME_PADDING = '0'; private static final char TIME_SEPARATOR = ':'; Loading Loading @@ -648,33 +647,36 @@ public class DateUtils } } private static void append(StringBuilder sb, long value, boolean pad, char zeroDigit) { if (value < 10) { if (pad) { sb.append(zeroDigit); } } else { sb.append((char) (zeroDigit + (value / 10))); } sb.append((char) (zeroDigit + (value % 10))); } /** * Fast formatting of h:mm:ss * Fast formatting of h:mm:ss. */ private static String formatElapsedTime(StringBuilder recycle, String format, long hours, long minutes, long seconds) { if (FAST_FORMAT_HMMSS.equals(format)) { char zeroDigit = LocaleData.get(Locale.getDefault()).zeroDigit; StringBuilder sb = recycle; if (sb == null) { sb = new StringBuilder(8); } else { sb.setLength(0); } sb.append(hours); append(sb, hours, false, zeroDigit); sb.append(TIME_SEPARATOR); if (minutes < 10) { sb.append(TIME_PADDING); } else { sb.append(toDigitChar(minutes / 10)); } sb.append(toDigitChar(minutes % 10)); append(sb, minutes, true, zeroDigit); sb.append(TIME_SEPARATOR); if (seconds < 10) { sb.append(TIME_PADDING); } else { sb.append(toDigitChar(seconds / 10)); } sb.append(toDigitChar(seconds % 10)); append(sb, seconds, true, zeroDigit); return sb.toString(); } else { return String.format(format, hours, minutes, seconds); Loading @@ -682,40 +684,28 @@ public class DateUtils } /** * Fast formatting of m:ss * Fast formatting of mm:ss. */ private static String formatElapsedTime(StringBuilder recycle, String format, long minutes, long seconds) { if (FAST_FORMAT_MMSS.equals(format)) { char zeroDigit = LocaleData.get(Locale.getDefault()).zeroDigit; StringBuilder sb = recycle; if (sb == null) { sb = new StringBuilder(8); } else { sb.setLength(0); } if (minutes < 10) { sb.append(TIME_PADDING); } else { sb.append(toDigitChar(minutes / 10)); } sb.append(toDigitChar(minutes % 10)); append(sb, minutes, false, zeroDigit); sb.append(TIME_SEPARATOR); if (seconds < 10) { sb.append(TIME_PADDING); } else { sb.append(toDigitChar(seconds / 10)); } sb.append(toDigitChar(seconds % 10)); append(sb, seconds, true, zeroDigit); return sb.toString(); } else { return String.format(format, minutes, seconds); } } private static char toDigitChar(long digit) { return (char) (digit + '0'); } /** * Format a date / time such that if the then is on the same day as now, it shows * just the time and if it's a different day, it shows just the date. Loading Loading @@ -1387,6 +1377,14 @@ public class DateUtils String endMonthDayString = isInstant ? null : endDate.format(MONTH_DAY_FORMAT); String endYearString = isInstant ? null : endDate.format(YEAR_FORMAT); String startStandaloneMonthString = startMonthString; String endStandaloneMonthString = endMonthString; // We need standalone months for these strings in Persian (fa): http://b/6811327 if (!numericDate && !abbrevMonth && Locale.getDefault().getLanguage().equals("fa")) { startStandaloneMonthString = startDate.format("%-B"); endStandaloneMonthString = endDate.format("%-B"); } if (startMonthNum != endMonthNum) { // Same year, different month. // Example: "October 28 - November 3" Loading @@ -1407,7 +1405,8 @@ public class DateUtils startWeekDayString, startMonthString, startMonthDayString, startYearString, startTimeString, endWeekDayString, endMonthString, endMonthDayString, endYearString, endTimeString); endYearString, endTimeString, startStandaloneMonthString, endStandaloneMonthString); } if (startDay != endDay) { Loading @@ -1426,7 +1425,8 @@ public class DateUtils startWeekDayString, startMonthString, startMonthDayString, startYearString, startTimeString, endWeekDayString, endMonthString, endMonthDayString, endYearString, endTimeString); endYearString, endTimeString, startStandaloneMonthString, endStandaloneMonthString); } // Same start and end day Loading core/java/android/text/format/Time.java +26 −2 Original line number Diff line number Diff line Loading @@ -151,6 +151,9 @@ public class Time { private static String sDateTimeFormat; private static String sAm; private static String sPm; private static char sZeroDigit; // Referenced by native code. private static String sDateCommand = "%a %b %e %H:%M:%S %Z %Y"; /** Loading Loading @@ -323,6 +326,7 @@ public class Time { sAm = localeData.amPm[0]; sPm = localeData.amPm[1]; sZeroDigit = localeData.zeroDigit; sShortMonths = localeData.shortMonthNames; sLongMonths = localeData.longMonthNames; Loading @@ -338,12 +342,32 @@ public class Time { sLocale = locale; } return format1(format); String result = format1(format); if (sZeroDigit != '0') { result = localizeDigits(result); } return result; } } native private String format1(String format); // TODO: unify this with java.util.Formatter's copy. private String localizeDigits(String s) { int length = s.length(); int offsetToLocalizedDigits = sZeroDigit - '0'; StringBuilder result = new StringBuilder(length); for (int i = 0; i < length; ++i) { char ch = s.charAt(i); if (ch >= '0' && ch <= '9') { ch += offsetToLocalizedDigits; } result.append(ch); } return result.toString(); } /** * Return the current time in YYYYMMDDTHHMMSS<tz> format */ Loading Loading @@ -673,7 +697,7 @@ public class Time { int minutes = (offset % 3600) / 60; int hours = offset / 3600; return String.format("%s%s%02d:%02d", base, sign, hours, minutes); return String.format(Locale.US, "%s%s%02d:%02d", base, sign, hours, minutes); } } Loading core/res/res/values-fa/donottranslate-cldr.xml +10 −10 Original line number Diff line number Diff line Loading @@ -37,22 +37,22 @@ <string name="time_wday_date">%1$s، %2$s %3$s</string> <string name="wday_date">%2$s %3$s</string> <string name="time_wday">%1$s، %2$s</string> <string name="same_year_md1_md2">%3$s LLLL تا %8$s LLLL</string> <string name="same_year_wday1_md1_wday2_md2">%1$s %3$s LLLL تا %6$s %8$s LLLL</string> <string name="same_year_md1_time1_md2_time2">%5$s، %3$s LLLL تا %10$s، %8$s LLLL</string> <string name="same_month_md1_time1_md2_time2">%5$s، %3$s LLLL تا %10$s، %8$s LLLL</string> <string name="same_year_wday1_md1_time1_wday2_md2_time2">%5$s، %1$s %3$s LLLL تا %10$s، %6$s %8$s LLLL</string> <string name="same_month_wday1_md1_time1_wday2_md2_time2">%5$s، %1$s %3$s LLLL تا %10$s، %6$s %8$s LLLL</string> <string name="same_year_md1_md2">%3$s %11$s تا %8$s %12$s</string> <string name="same_year_wday1_md1_wday2_md2">%1$s %3$s %11$s تا %6$s %8$s %12$s</string> <string name="same_year_md1_time1_md2_time2">%5$s، %3$s %11$s تا %10$s، %8$s %12$s</string> <string name="same_month_md1_time1_md2_time2">%5$s، %3$s %11$s تا %10$s، %8$s %12$s</string> <string name="same_year_wday1_md1_time1_wday2_md2_time2">%5$s، %1$s %3$s %11$s تا %10$s، %6$s %8$s %12$s</string> <string name="same_month_wday1_md1_time1_wday2_md2_time2">%5$s، %1$s %3$s %11$s تا %10$s، %6$s %8$s %12$s</string> <string name="same_year_mdy1_time1_mdy2_time2">%5$s، %3$s %2$s %4$s تا %10$s، %8$s %7$s %9$s</string> <string name="same_month_mdy1_time1_mdy2_time2">%5$s، %3$s %2$s %4$s تا %10$s، %8$s %7$s %9$s</string> <string name="same_year_wday1_mdy1_time1_wday2_mdy2_time2">%5$s، %1$s %3$s %2$s %4$s تا %10$s، %6$s %8$s %7$s %9$s</string> <string name="same_month_wday1_mdy1_time1_wday2_mdy2_time2">%5$s، %1$s %3$s %2$s %4$s تا %10$s، %6$s %8$s %7$s %9$s</string> <string name="same_month_wday1_mdy1_wday2_mdy2">%1$s %3$s %2$s %4$s تا %6$s %8$s %7$s %9$s</string> <string name="same_month_md1_md2">%3$s تا %8$s LLL</string> <string name="same_month_wday1_md1_wday2_md2">%1$s %3$s LLLL تا %6$s %8$s LLLL</string> <string name="same_year_mdy1_mdy2">%3$s LLL تا %8$s %2$s %9$s</string> <string name="same_month_md1_md2">%3$s تا %8$s %11$s</string> <string name="same_month_wday1_md1_wday2_md2">%1$s %3$s %11$s تا %6$s %8$s %12$s</string> <string name="same_year_mdy1_mdy2">%3$s %11$s تا %8$s %7$s %9$s</string> <string name="same_month_mdy1_mdy2">%3$s تا %8$s %2$s %9$s</string> <string name="same_year_wday1_mdy1_wday2_mdy2">%1$s %3$s LLL تا %6$s %8$s %2$s %9$s</string> <string name="same_year_wday1_mdy1_wday2_mdy2">%1$s %3$s %11$s تا %6$s %8$s %7$s %9$s</string> <string name="short_format_month">%b</string> <string name="full_wday_month_day_no_year">E d LLLL</string> <string name="abbrev_wday_month_day_no_year">E d LLLL</string> Loading Loading
core/java/android/text/format/DateUtils.java +34 −34 Original line number Diff line number Diff line Loading @@ -45,7 +45,6 @@ public class DateUtils private static final String FAST_FORMAT_HMMSS = "%1$d:%2$02d:%3$02d"; private static final String FAST_FORMAT_MMSS = "%1$02d:%2$02d"; private static final char TIME_PADDING = '0'; private static final char TIME_SEPARATOR = ':'; Loading Loading @@ -648,33 +647,36 @@ public class DateUtils } } private static void append(StringBuilder sb, long value, boolean pad, char zeroDigit) { if (value < 10) { if (pad) { sb.append(zeroDigit); } } else { sb.append((char) (zeroDigit + (value / 10))); } sb.append((char) (zeroDigit + (value % 10))); } /** * Fast formatting of h:mm:ss * Fast formatting of h:mm:ss. */ private static String formatElapsedTime(StringBuilder recycle, String format, long hours, long minutes, long seconds) { if (FAST_FORMAT_HMMSS.equals(format)) { char zeroDigit = LocaleData.get(Locale.getDefault()).zeroDigit; StringBuilder sb = recycle; if (sb == null) { sb = new StringBuilder(8); } else { sb.setLength(0); } sb.append(hours); append(sb, hours, false, zeroDigit); sb.append(TIME_SEPARATOR); if (minutes < 10) { sb.append(TIME_PADDING); } else { sb.append(toDigitChar(minutes / 10)); } sb.append(toDigitChar(minutes % 10)); append(sb, minutes, true, zeroDigit); sb.append(TIME_SEPARATOR); if (seconds < 10) { sb.append(TIME_PADDING); } else { sb.append(toDigitChar(seconds / 10)); } sb.append(toDigitChar(seconds % 10)); append(sb, seconds, true, zeroDigit); return sb.toString(); } else { return String.format(format, hours, minutes, seconds); Loading @@ -682,40 +684,28 @@ public class DateUtils } /** * Fast formatting of m:ss * Fast formatting of mm:ss. */ private static String formatElapsedTime(StringBuilder recycle, String format, long minutes, long seconds) { if (FAST_FORMAT_MMSS.equals(format)) { char zeroDigit = LocaleData.get(Locale.getDefault()).zeroDigit; StringBuilder sb = recycle; if (sb == null) { sb = new StringBuilder(8); } else { sb.setLength(0); } if (minutes < 10) { sb.append(TIME_PADDING); } else { sb.append(toDigitChar(minutes / 10)); } sb.append(toDigitChar(minutes % 10)); append(sb, minutes, false, zeroDigit); sb.append(TIME_SEPARATOR); if (seconds < 10) { sb.append(TIME_PADDING); } else { sb.append(toDigitChar(seconds / 10)); } sb.append(toDigitChar(seconds % 10)); append(sb, seconds, true, zeroDigit); return sb.toString(); } else { return String.format(format, minutes, seconds); } } private static char toDigitChar(long digit) { return (char) (digit + '0'); } /** * Format a date / time such that if the then is on the same day as now, it shows * just the time and if it's a different day, it shows just the date. Loading Loading @@ -1387,6 +1377,14 @@ public class DateUtils String endMonthDayString = isInstant ? null : endDate.format(MONTH_DAY_FORMAT); String endYearString = isInstant ? null : endDate.format(YEAR_FORMAT); String startStandaloneMonthString = startMonthString; String endStandaloneMonthString = endMonthString; // We need standalone months for these strings in Persian (fa): http://b/6811327 if (!numericDate && !abbrevMonth && Locale.getDefault().getLanguage().equals("fa")) { startStandaloneMonthString = startDate.format("%-B"); endStandaloneMonthString = endDate.format("%-B"); } if (startMonthNum != endMonthNum) { // Same year, different month. // Example: "October 28 - November 3" Loading @@ -1407,7 +1405,8 @@ public class DateUtils startWeekDayString, startMonthString, startMonthDayString, startYearString, startTimeString, endWeekDayString, endMonthString, endMonthDayString, endYearString, endTimeString); endYearString, endTimeString, startStandaloneMonthString, endStandaloneMonthString); } if (startDay != endDay) { Loading @@ -1426,7 +1425,8 @@ public class DateUtils startWeekDayString, startMonthString, startMonthDayString, startYearString, startTimeString, endWeekDayString, endMonthString, endMonthDayString, endYearString, endTimeString); endYearString, endTimeString, startStandaloneMonthString, endStandaloneMonthString); } // Same start and end day Loading
core/java/android/text/format/Time.java +26 −2 Original line number Diff line number Diff line Loading @@ -151,6 +151,9 @@ public class Time { private static String sDateTimeFormat; private static String sAm; private static String sPm; private static char sZeroDigit; // Referenced by native code. private static String sDateCommand = "%a %b %e %H:%M:%S %Z %Y"; /** Loading Loading @@ -323,6 +326,7 @@ public class Time { sAm = localeData.amPm[0]; sPm = localeData.amPm[1]; sZeroDigit = localeData.zeroDigit; sShortMonths = localeData.shortMonthNames; sLongMonths = localeData.longMonthNames; Loading @@ -338,12 +342,32 @@ public class Time { sLocale = locale; } return format1(format); String result = format1(format); if (sZeroDigit != '0') { result = localizeDigits(result); } return result; } } native private String format1(String format); // TODO: unify this with java.util.Formatter's copy. private String localizeDigits(String s) { int length = s.length(); int offsetToLocalizedDigits = sZeroDigit - '0'; StringBuilder result = new StringBuilder(length); for (int i = 0; i < length; ++i) { char ch = s.charAt(i); if (ch >= '0' && ch <= '9') { ch += offsetToLocalizedDigits; } result.append(ch); } return result.toString(); } /** * Return the current time in YYYYMMDDTHHMMSS<tz> format */ Loading Loading @@ -673,7 +697,7 @@ public class Time { int minutes = (offset % 3600) / 60; int hours = offset / 3600; return String.format("%s%s%02d:%02d", base, sign, hours, minutes); return String.format(Locale.US, "%s%s%02d:%02d", base, sign, hours, minutes); } } Loading
core/res/res/values-fa/donottranslate-cldr.xml +10 −10 Original line number Diff line number Diff line Loading @@ -37,22 +37,22 @@ <string name="time_wday_date">%1$s، %2$s %3$s</string> <string name="wday_date">%2$s %3$s</string> <string name="time_wday">%1$s، %2$s</string> <string name="same_year_md1_md2">%3$s LLLL تا %8$s LLLL</string> <string name="same_year_wday1_md1_wday2_md2">%1$s %3$s LLLL تا %6$s %8$s LLLL</string> <string name="same_year_md1_time1_md2_time2">%5$s، %3$s LLLL تا %10$s، %8$s LLLL</string> <string name="same_month_md1_time1_md2_time2">%5$s، %3$s LLLL تا %10$s، %8$s LLLL</string> <string name="same_year_wday1_md1_time1_wday2_md2_time2">%5$s، %1$s %3$s LLLL تا %10$s، %6$s %8$s LLLL</string> <string name="same_month_wday1_md1_time1_wday2_md2_time2">%5$s، %1$s %3$s LLLL تا %10$s، %6$s %8$s LLLL</string> <string name="same_year_md1_md2">%3$s %11$s تا %8$s %12$s</string> <string name="same_year_wday1_md1_wday2_md2">%1$s %3$s %11$s تا %6$s %8$s %12$s</string> <string name="same_year_md1_time1_md2_time2">%5$s، %3$s %11$s تا %10$s، %8$s %12$s</string> <string name="same_month_md1_time1_md2_time2">%5$s، %3$s %11$s تا %10$s، %8$s %12$s</string> <string name="same_year_wday1_md1_time1_wday2_md2_time2">%5$s، %1$s %3$s %11$s تا %10$s، %6$s %8$s %12$s</string> <string name="same_month_wday1_md1_time1_wday2_md2_time2">%5$s، %1$s %3$s %11$s تا %10$s، %6$s %8$s %12$s</string> <string name="same_year_mdy1_time1_mdy2_time2">%5$s، %3$s %2$s %4$s تا %10$s، %8$s %7$s %9$s</string> <string name="same_month_mdy1_time1_mdy2_time2">%5$s، %3$s %2$s %4$s تا %10$s، %8$s %7$s %9$s</string> <string name="same_year_wday1_mdy1_time1_wday2_mdy2_time2">%5$s، %1$s %3$s %2$s %4$s تا %10$s، %6$s %8$s %7$s %9$s</string> <string name="same_month_wday1_mdy1_time1_wday2_mdy2_time2">%5$s، %1$s %3$s %2$s %4$s تا %10$s، %6$s %8$s %7$s %9$s</string> <string name="same_month_wday1_mdy1_wday2_mdy2">%1$s %3$s %2$s %4$s تا %6$s %8$s %7$s %9$s</string> <string name="same_month_md1_md2">%3$s تا %8$s LLL</string> <string name="same_month_wday1_md1_wday2_md2">%1$s %3$s LLLL تا %6$s %8$s LLLL</string> <string name="same_year_mdy1_mdy2">%3$s LLL تا %8$s %2$s %9$s</string> <string name="same_month_md1_md2">%3$s تا %8$s %11$s</string> <string name="same_month_wday1_md1_wday2_md2">%1$s %3$s %11$s تا %6$s %8$s %12$s</string> <string name="same_year_mdy1_mdy2">%3$s %11$s تا %8$s %7$s %9$s</string> <string name="same_month_mdy1_mdy2">%3$s تا %8$s %2$s %9$s</string> <string name="same_year_wday1_mdy1_wday2_mdy2">%1$s %3$s LLL تا %6$s %8$s %2$s %9$s</string> <string name="same_year_wday1_mdy1_wday2_mdy2">%1$s %3$s %11$s تا %6$s %8$s %7$s %9$s</string> <string name="short_format_month">%b</string> <string name="full_wday_month_day_no_year">E d LLLL</string> <string name="abbrev_wday_month_day_no_year">E d LLLL</string> Loading