< prev index next >
src/java.base/share/classes/java/time/format/DateTimeFormatterBuilder.java
Print this page
rev 47733 : 8176841: Additional Unicode Language-Tag Extensions
8189134: New system properties for the default Locale extensions
Reviewed-by:
@@ -1,7 +1,7 @@
/*
- * Copyright (c) 2012, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2017, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation. Oracle designates this
@@ -118,10 +118,11 @@
import java.util.TimeZone;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentMap;
import sun.text.spi.JavaTimeDateTimePatternProvider;
+import sun.util.locale.provider.CalendarDataUtility;
import sun.util.locale.provider.LocaleProviderAdapter;
import sun.util.locale.provider.LocaleResources;
import sun.util.locale.provider.TimeZoneNameUtility;
/**
@@ -214,11 +215,12 @@
throw new IllegalArgumentException("Either dateStyle or timeStyle must be non-null");
}
LocaleProviderAdapter adapter = LocaleProviderAdapter.getAdapter(JavaTimeDateTimePatternProvider.class, locale);
JavaTimeDateTimePatternProvider provider = adapter.getJavaTimeDateTimePatternProvider();
String pattern = provider.getJavaTimeDateTimePattern(convertStyle(timeStyle),
- convertStyle(dateStyle), chrono.getCalendarType(), locale);
+ convertStyle(dateStyle), chrono.getCalendarType(),
+ CalendarDataUtility.findRegionOverride(locale).orElse(locale));
return pattern;
}
/**
* Converts the given FormatStyle to the java.text.DateFormat style.
@@ -2158,10 +2160,16 @@
* using the default locale.
* <p>
* This will create a formatter with the {@linkplain Locale#getDefault(Locale.Category) default FORMAT locale}.
* Numbers will be printed and parsed using the standard DecimalStyle.
* The resolver style will be {@link ResolverStyle#SMART SMART}.
+ * If the default locale contains "ca" (calendar), "rg" (region override)
+ * and/or "tz" (timezone)
+ * <a href="../../util/Locale.html#def_locale_extension">Unicode extensions</a>,
+ * the chronology and/or the zone are overriden. If both "ca" and "rg" are
+ * specified, the chronology from "ca" extension supersedes the implicit one
+ * from "rg" extension.
* <p>
* Calling this method will end any open optional sections by repeatedly
* calling {@link #optionalEnd()} before creating the formatter.
* <p>
* This builder can still be used after creating the formatter if desired,
@@ -2178,10 +2186,16 @@
* using the specified locale.
* <p>
* This will create a formatter with the specified locale.
* Numbers will be printed and parsed using the standard DecimalStyle.
* The resolver style will be {@link ResolverStyle#SMART SMART}.
+ * If the specified locale contains "ca" (calendar), "rg" (region override)
+ * and/or "tz" (timezone)
+ * <a href="../../util/Locale.html#def_locale_extension">Unicode extensions</a>,
+ * the chronology and/or the zone are overriden. If both "ca" and "rg" are
+ * specified, the chronology from "ca" extension supersedes the implicit one
+ * from "rg" extension.
* <p>
* Calling this method will end any open optional sections by repeatedly
* calling {@link #optionalEnd()} before creating the formatter.
* <p>
* This builder can still be used after creating the formatter if desired,
@@ -2216,12 +2230,22 @@
Objects.requireNonNull(locale, "locale");
while (active.parent != null) {
optionalEnd();
}
CompositePrinterParser pp = new CompositePrinterParser(printerParsers, false);
+
+ // Check for chronology/timezone in locale object
+ Chronology c = locale.getUnicodeLocaleType("ca") != null ?
+ Chronology.ofLocale(locale) : chrono;
+ String tzType = locale.getUnicodeLocaleType("tz");
+ ZoneId z = tzType != null ?
+ TimeZoneNameUtility.convertLDMLShortID(tzType)
+ .map(ZoneId::of)
+ .orElse(null) :
+ null;
return new DateTimeFormatter(pp, locale, DecimalStyle.STANDARD,
- resolverStyle, null, chrono, null);
+ resolverStyle, null, c, z);
}
//-----------------------------------------------------------------------
/**
* Strategy for formatting/parsing date-time information.
< prev index next >