mirror of
https://github.com/unicode-org/icu.git
synced 2025-04-06 22:15:31 +00:00
ICU-8464 Fix so that calendar used in RelativeDateTimeFormatter is the default calendar for locale which may not be the gregorian calendar.
X-SVN-Rev: 34682
This commit is contained in:
parent
b90cbad09c
commit
2601495ccd
2 changed files with 11 additions and 17 deletions
|
@ -281,12 +281,11 @@ public final class RelativeDateTimeFormatter {
|
|||
* @provisional
|
||||
*/
|
||||
public static RelativeDateTimeFormatter getInstance(ULocale locale) {
|
||||
CalendarData calData = new CalendarData(locale, null);
|
||||
RelativeDateTimeFormatterData data = cache.get(locale);
|
||||
return new RelativeDateTimeFormatter(
|
||||
data.qualitativeUnitMap,
|
||||
data.quantitativeUnitMap,
|
||||
new MessageFormat(calData.getDateTimePattern()),
|
||||
new MessageFormat(data.dateTimePattern),
|
||||
PluralRules.forLocale(locale),
|
||||
NumberFormat.getInstance(locale));
|
||||
}
|
||||
|
@ -369,9 +368,6 @@ public final class RelativeDateTimeFormatter {
|
|||
String current) {
|
||||
EnumMap<Direction, String> unitStrings =
|
||||
new EnumMap<Direction, String>(Direction.class);
|
||||
unitStrings.put(Direction.LAST, current);
|
||||
unitStrings.put(Direction.THIS, current);
|
||||
unitStrings.put(Direction.NEXT, current);
|
||||
unitStrings.put(Direction.PLAIN, current);
|
||||
qualitativeUnits.put(unit, unitStrings);
|
||||
}
|
||||
|
@ -428,13 +424,16 @@ public final class RelativeDateTimeFormatter {
|
|||
private static class RelativeDateTimeFormatterData {
|
||||
public RelativeDateTimeFormatterData(
|
||||
EnumMap<AbsoluteUnit, EnumMap<Direction, String>> qualitativeUnitMap,
|
||||
EnumMap<RelativeUnit, QuantityFormatter[]> quantitativeUnitMap) {
|
||||
EnumMap<RelativeUnit, QuantityFormatter[]> quantitativeUnitMap,
|
||||
String dateTimePattern) {
|
||||
this.qualitativeUnitMap = qualitativeUnitMap;
|
||||
this.quantitativeUnitMap = quantitativeUnitMap;
|
||||
this.dateTimePattern = dateTimePattern;
|
||||
}
|
||||
|
||||
public final EnumMap<AbsoluteUnit, EnumMap<Direction, String>> qualitativeUnitMap;
|
||||
public final EnumMap<RelativeUnit, QuantityFormatter[]> quantitativeUnitMap;
|
||||
public final String dateTimePattern; // Example: "{1}, {0}"
|
||||
}
|
||||
|
||||
private static class Cache {
|
||||
|
@ -547,8 +546,11 @@ public final class RelativeDateTimeFormatter {
|
|||
r.getWithFallback("fields/sun"),
|
||||
dayOfWeekMap,
|
||||
AbsoluteUnit.SUNDAY,
|
||||
qualitativeUnitMap);
|
||||
return new RelativeDateTimeFormatterData(qualitativeUnitMap, quantitativeUnitMap);
|
||||
qualitativeUnitMap);
|
||||
CalendarData calData = new CalendarData(
|
||||
ulocale, r.getStringWithFallback("calendar/default"));
|
||||
return new RelativeDateTimeFormatterData(
|
||||
qualitativeUnitMap, quantitativeUnitMap, calData.getDateTimePattern());
|
||||
}
|
||||
|
||||
private void addTimeUnit(
|
||||
|
@ -615,8 +617,7 @@ public final class RelativeDateTimeFormatter {
|
|||
if (daysOfWeekBundle.getSize() != 7) {
|
||||
throw new IllegalStateException(String.format("Expect 7 days in a week, got %d", daysOfWeekBundle.getSize()));
|
||||
}
|
||||
// Assuming that days of week are always listed from Sunday.
|
||||
// TODO(tkeep): Is this always true?
|
||||
// Sunday always comes first in CLDR data.
|
||||
int idx = 0;
|
||||
dayOfWeekMap.put(AbsoluteUnit.SUNDAY, daysOfWeekBundle.getString(idx++));
|
||||
dayOfWeekMap.put(AbsoluteUnit.MONDAY, daysOfWeekBundle.getString(idx++));
|
||||
|
@ -628,7 +629,6 @@ public final class RelativeDateTimeFormatter {
|
|||
return dayOfWeekMap;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
private static final Cache cache = new Cache();
|
||||
}
|
||||
|
|
|
@ -6,8 +6,6 @@
|
|||
*/
|
||||
package com.ibm.icu.dev.test.format;
|
||||
|
||||
|
||||
|
||||
import com.ibm.icu.dev.test.TestFmwk;
|
||||
import com.ibm.icu.text.NumberFormat;
|
||||
import com.ibm.icu.text.RelativeDateTimeFormatter;
|
||||
|
@ -16,10 +14,6 @@ import com.ibm.icu.text.RelativeDateTimeFormatter.Direction;
|
|||
import com.ibm.icu.text.RelativeDateTimeFormatter.RelativeUnit;
|
||||
import com.ibm.icu.util.ULocale;
|
||||
|
||||
/**
|
||||
* @author rocketman
|
||||
*
|
||||
*/
|
||||
public class RelativeDateTimeFormatterTest extends TestFmwk {
|
||||
|
||||
public static void main(String[] args) throws Exception {
|
||||
|
|
Loading…
Add table
Reference in a new issue