Merge "Fix date formatting for fa locales." into jb-mr1-dev

This commit is contained in:
Elliott Hughes
2012-09-17 14:45:42 -07:00
committed by Android (Google) Code Review
2 changed files with 39 additions and 25 deletions

View File

@@ -22194,6 +22194,7 @@ package android.text.format {
field public static final char MONTH = 77; // 0x004d 'M'
field public static final char QUOTE = 39; // 0x0027 '\''
field public static final char SECONDS = 115; // 0x0073 's'
field public static final char STANDALONE_MONTH = 76; // 0x004c 'L'
field public static final char TIME_ZONE = 122; // 0x007a 'z'
field public static final char YEAR = 121; // 0x0079 'y'
}

View File

@@ -35,10 +35,18 @@ import java.text.SimpleDateFormat;
Utility class for producing strings with formatted date/time.
<p>
This class takes as inputs a format string and a representation of a date/time.
The format string controls how the output is generated.
Most callers should avoid supplying their own format strings to this
class' {@code format} methods and rely on the correctly localized ones
supplied by the system. This class' factory methods return
appropriately-localized {@link java.text.DateFormat} instances, suitable
for both formatting and parsing dates. For the canonical documentation
of format strings, see {@link java.text.SimpleDateFormat}.
</p>
<p>
The format methods in this class takes as inputs a format string and a representation of a date/time.
The format string controls how the output is generated.
This class only supports a subset of the full Unicode specification.
Use {@link java.text.SimpleDateFormat} if you need more.
Formatting characters may be repeated in order to get more detailed representations
of that field. For instance, the format character &apos;M&apos; is used to
represent the month. Depending on how many times that character is repeated
@@ -152,7 +160,8 @@ public class DateFormat {
public static final char MINUTE = 'm';
/**
This designator indicates the month of the year
This designator indicates the month of the year. See also
{@link #STANDALONE_MONTH}.
Examples for September:
M -> 9
@@ -162,6 +171,14 @@ public class DateFormat {
*/
public static final char MONTH = 'M';
/**
This designator indicates the standalone month of the year,
necessary in some format strings in some languages. For
example, Russian distinguishes between the "June" in
"June" and that in "June 2010".
*/
public static final char STANDALONE_MONTH = 'L';
/**
This designator indicates the seconds of the minute.
@@ -374,7 +391,7 @@ public class DateFormat {
index++;
}
if (!foundMonth && (c == MONTH)) {
if (!foundMonth && (c == MONTH || c == STANDALONE_MONTH)) {
foundMonth = true;
order[index] = MONTH;
index++;
@@ -494,9 +511,10 @@ public class DateFormat {
break;
case MONTH:
replacement = getMonthString(inDate, count);
case STANDALONE_MONTH:
replacement = getMonthString(inDate, count, c);
break;
case SECONDS:
replacement = zeroPad(inDate.get(Calendar.SECOND), count);
break;
@@ -527,14 +545,19 @@ public class DateFormat {
return s.toString();
}
private static final String getMonthString(Calendar inDate, int count) {
private static final String getMonthString(Calendar inDate, int count, int kind) {
boolean standalone = (kind == STANDALONE_MONTH);
int month = inDate.get(Calendar.MONTH);
if (count >= 4)
return DateUtils.getMonthString(month, DateUtils.LENGTH_LONG);
else if (count == 3)
return DateUtils.getMonthString(month, DateUtils.LENGTH_MEDIUM);
else {
if (count >= 4) {
return standalone
? DateUtils.getStandaloneMonthString(month, DateUtils.LENGTH_LONG)
: DateUtils.getMonthString(month, DateUtils.LENGTH_LONG);
} else if (count == 3) {
return standalone
? DateUtils.getStandaloneMonthString(month, DateUtils.LENGTH_MEDIUM)
: DateUtils.getMonthString(month, DateUtils.LENGTH_MEDIUM);
} else {
// Calendar.JANUARY == 0, so add 1 to month.
return zeroPad(month+1, count);
}
@@ -574,7 +597,8 @@ public class DateFormat {
private static final String getYearString(Calendar inDate, int count) {
int year = inDate.get(Calendar.YEAR);
return (count <= 2) ? zeroPad(year % 100, 2) : String.valueOf(year);
return (count <= 2) ? zeroPad(year % 100, 2)
: String.format(Locale.getDefault(), "%d", year);
}
private static final int appendQuotedText(SpannableStringBuilder s, int i, int len) {
@@ -615,17 +639,6 @@ public class DateFormat {
}
private static final String zeroPad(int inValue, int inMinDigits) {
String val = String.valueOf(inValue);
if (val.length() < inMinDigits) {
char[] buf = new char[inMinDigits];
for (int i = 0; i < inMinDigits; i++)
buf[i] = '0';
val.getChars(0, val.length(), buf, inMinDigits - val.length());
val = new String(buf);
}
return val;
return String.format(Locale.getDefault(), "%0" + inMinDigits + "d", inValue);
}
}