History log of /libcore/ojluni/src/main/java/java/text/SimpleDateFormat.java
Revision Date Author Comments
6fdc0bf198c455cbe73ecf825bd0f8f985481066 30-Sep-2016 Neil Fuller <nfuller@google.com> Remove DateFormat time pattern caching

This change removes pattern string caching from
the SimpleDateFormat constructor only used by
DateFormat.getInstance().

Before this change, the LocaleData.getTimeFormat(int) method
that is used to populate the cached data can return different
information for SHORT and MEDIUM times based on the
DateFormat.is24Hour setting and so the results are not safe
to cache: if the user modifies their "use 24-hour format"
setting and the data is already cached the old pattern was
persisted forever.

This was also causing various CTS tests to fail if the device
had the "use 24-hour format" setting on. For example:

libcore.java.text.OldDateFormatTest
org.apache.harmony.tests.java.text.MessageFormatTest
org.apache.harmony.tests.java.util.DateTest

Callers of java.text.DateFormat.get(int, int, int, Locale)
are affected. In practice that means DateFormat.getTimeInstance()
/ getTimeInstance(int) and getTimeInstance(int, Locale).

Indirect callers in the Android framework include:
android.text.format.DateUtils
android.text.format.DateFormat
android.widget.DigitalClock
java.text.MessageFormat

This change has a small negative affect on performance, but
not a significant one: obtaining a DateFormat via
DateFormat.getTimeInstance() goes from ~28us to
~33us on an Angler device.

Full results for the benchmarks included:

Before:

benchmarkMethod=timeGetDateTimeInstance
runtime(ns): min=27518.68, 1st qu.=28461.12, median=28775.87,
mean=28732.44, 3rd qu.=29235.59, max=29320.80
runtime(ns): min=28599.17, 1st qu.=28769.57, median=29277.13,
mean=29682.69, 3rd qu.=29824.08, max=33419.06

benchmarkMethod=timeGetDateTimeInstance_multiple
runtime(ns): min=108667.38, 1st qu.=110223.70, median=111547.98,
mean=112173.89, 3rd qu.=113748.88, max=118091.12
runtime(ns): min=102995.66, 1st qu.=105045.16, median=108558.77,
mean=108817.18, 3rd qu.=111677.65, max=115886.11

After:

benchmarkMethod=timeGetDateTimeInstance
runtime(ns): min=31365.39, 1st qu.=32904.01, median=33303.47,
mean=33244.55, 3rd qu.=33983.32, max=34052.99
runtime(ns): min=31785.28, 1st qu.=32921.68, median=33364.01,
mean=33531.03, 3rd qu.=34301.06, max=35031.33

benchmarkMethod=timeGetDateTimeInstance_multiple
runtime(ns): min=126834.48, 1st qu.=128605.17, median=130069.44,
mean=131157.63, 3rd qu.=134095.26, max=138164.92
runtime(ns): min=124618.08, 1st qu.=126097.91, median=130190.93,
mean=130027.17, 3rd qu.=131991.56, max=140283.06

Bug: 31762542
Test: Ran CtsLibcoreTestCases with the "use 24-hour format" on
and off
Change-Id: I02798e8fcd2ed5f7625a32261112560b5d9b18f3
82c413526cc241290cc69170f28cac5213cf74ed 25-Jul-2016 Joachim Sauer <jsauer@google.com> Fix standalone weekday parsing.

Parsing standalone weekdays ('cccc') was treated the same way as
"regular" weekdays ('EEEE') since N.

This ensures that the correct names are used for parsing. This bug
doesn't have any effect in most locales, as most either don't have a
separate standalone version of the weekday or they only differ in
casing.

Also added a test for formatting standalone weekdays. It wasn't broken
but also wasn't tested before.

Tested: libcore/run-libcore-tests libcore.java.text.SimpleDateFormatTest
org.apache.harmony.tests.java.text.SimpleDateFormatTest
Bug: 30323478

(cherry picked from commit 91116215bcb3e903fc334eaf23898b0d8ece6924)
Note that git merged the change wrong and it was manually corrected
(passing "true" to parseWeekday for the standalone case).

Change-Id: I7fff3d36b3f3838d5883341ed5eaf3488906f152
cdde6627c3b5fe67e086043cb789e88110a38028 18-Jul-2016 Joachim Sauer <jsauer@google.com> Fix time zone formatting with setZoneStrings().

User-defined time zone strings (using
DateFormatSymbols.setZoneStrings()) were ignored since N.

This make sure that formatting time zone names takes into account any
values specified by the user.

Also add a test to ensure that malformed arrays in setZoneStrings() are
correctly rejected.

Test: run cts -m CtsLibcoreTestCases --module-arg "CtsLibcoreTestCases:include-filter:libcore.java.text,org.apache.harmony.tests.java.text"

Bug: 30155437

(cherry picked from commit d8bef3c23bf1851242cc2dc189edaa544eeabe58)

Change-Id: Ie89d3a56c8a91f0d6d12da26490e16ed46095a0a
08db36e9a34896135e8b0883f65bde5b86ee90e6 25-Mar-2016 Narayan Kamath <narayan@google.com> SimpleDateFormat: Reset timezone after parse.

This reverts to Android M behaviour, which happens to be more
consistent and predictable.

bug: 27760434

(cherry picked from commit 2015e08d682be61dacd76c51bb0345f357fc4e96)

Change-Id: I67789bbc6d98c6a1d5816a119e3d9a379ff90ed6
d06c9ff1e64308978a6db2135d744613e396b65e 18-Jan-2016 Narayan Kamath <narayan@google.com> Make SDF slightly more lenient about parsing zone strings.

We tolerate a colon even formats that don't specify it. Also, the
existing code for verifying that a colon exists has been rewritten
for clarity.

bug: 26426526
Change-Id: Iea4ef6be0174a86d31df7ad9b6636ef904991cea
2c87ad3a45cecf9e344487cad1abfdebe79f2c7c 21-Dec-2015 Narayan Kamath <narayan@google.com> Update file headers.

Change-Id: I8149f41585768a1a4b72ab7bb4a1452376c05cc2
afe86efb5d4b237c50df82b7dcb581d4d75b1132 01-Dec-2015 Narayan Kamath <narayan@google.com> More UTS#35 conformance.

'S' must be interpreted as a fractional second field. While it is
loosely equivalent to milliseconds, it is not always so.

For instance:
"11.789045" seconds is 11 seconds and ~789 (not 789045) milliseconds.
"11.79" seconds is 11 seconds and 790 (not 79) milliseconds.

This change makes sure we deal with these values correctly. The
behaviour for count === 3 (SSS, eg. "11.564" seconds) is unchanged.

bug: 25863120
Change-Id: Idac94d7aafcdbdcd83ac561cf5895e5890cf8a56
00617c74e1f95fbe088f078341d607132575b0d6 02-Dec-2015 Narayan Kamath <narayan@google.com> Deal with CLDR abbreviations correctly.

CLDR data for some locales contains abbreviated forms that end
with a period ("Aug." for example). We should attempt to match those
even when the input date doesn't end with a period.

bug: 25863120
Change-Id: Id8cb14631b766f8286862488878ed11f359a3f00
d6c54ba7af74286d2e310703a4aa2c924ec85c99 01-Dec-2015 Narayan Kamath <narayan@google.com> Implement more of the UTS#35 spec.

- Support for "tiny" weekdays and months (EEEEE and MMMMM)
- Support for standalone weekdays and months.
- Proper support for the 'Z' specifier (RFC-822 timezones)

Also fixes a bug in how date+time patterns were generated and
makes several unit tests clearer by using assertEquals instead
of assertTrue.

Fixes most of our DateFormat / SimpleDateFormat related tests.

bug: 25859156
bug: 25863120

Change-Id: Ieec88a29ddbd8ea8076e8913dfad1330d7ad4c25
3822402ba5642bd60d5cd6305ceee73a613b4bc8 26-Nov-2015 Narayan Kamath <narayan@google.com> SimpleDateFormat: Emulate support for 'L' and 'c' format specifiers.

It looks like we'd partially implemented this already and this change
fills in the missing pieces. This is a temporary change because all of
this will be replaced with a proper ICU4J based formatter in short order.

bug: 25859156
Change-Id: I316a37b7c4ad5fb55ed592307d0683de85c14670
b7554f779d330037a5cf591fcc8be73db73a0384 07-Sep-2015 Narayan Kamath <narayan@google.com> Pretend to support 'L' and 'c' format specifiers.

Temporary fixes for Clocks / Maps. Proper support for standalone
week and month will be implemented in a future change.

Change-Id: I58e2cdb7c43978423f68f2d98d43341a3d9c748e
9c853c5b9ebbb0ef60a013ae10ee411d70dfa832 18-Feb-2015 Piotr Jastrzebski <haaawk@google.com> Use OpenJdk implementations of java.text.*

- LocaleInternalsTest has been disabled since it depends on
internal implementation details.
- Collator: Use libcore's RuleBasedCollatorICU to fetch collator
rules instead of sun.misc.resources.LocaleData & friends.
- DateFormat: Add support for set24HourTimePref (not wired up
yet).
- DateFormatSymbols : Use libcore's LocaleData & TimeZoneNames
classes internally.
- NumberFormat: Use libcore's LocaleData.
- Drop support for SCIENTIFICSTYLE (we should re-enable this at
some point ?).
- SimpleDateFormat : Don't reject the format specifiers for
standalone weekday and friends. We'll need to switch over to
using ICU4J formatters at some point.
- Calendar : Use GregorianCalendar only.
- TimeZone : Use TimeZoneNames to access time zone names.

Change-Id: I4a2866904d4f2f39f0793154d9aad7f109da3b5a
51b1b6997fd3f980076b8081f7f1165ccc2a4008 16-Feb-2015 Piotr Jastrzebski <haaawk@google.com> Initial import of OpenJdk files.

Create new libcore/ojluni directory with src/main/java and
src/main/native subdirectiories.

Build ojluni into core-oj jar.

Use openjdk classes from java.awt.font package.

Copy all files from jdk/src/share/classes and jdk/src/solaris/classes
directories in openjdk into libcore/ojluni/src/main/java.

Copy following native files from openjdk to
libcore/ojluni/src/main/native:
jdk/src/solaris/native/java/io/canonicalize_md.c
build/linux-amd64/include/classfile_constants.h
jdk/src/share/native/java/net/DatagramPacket.c
jdk/src/solaris/native/sun/net/spi/DefaultProxySelector.c
jdk/src/share/native/java/lang/Double.c
jdk/src/share/native/java/lang/fdlibm/include/fdlibm.h
jdk/src/solaris/native/sun/nio/ch/FileChannelImpl.c
jdk/src/solaris/native/java/io/FileDescriptor_md.c
jdk/src/solaris/native/sun/nio/ch/FileDispatcherImpl.c
jdk/src/share/native/java/io/FileInputStream.c
jdk/src/solaris/native/sun/nio/ch/FileKey.c
jdk/src/solaris/native/java/io/FileOutputStream_md.c
jdk/src/solaris/native/java/io/FileSystem_md.c
jdk/src/share/native/java/lang/Float.c
jdk/src/share/native/java/net/Inet4Address.c
jdk/src/solaris/native/java/net/Inet4AddressImpl.c
jdk/src/share/native/java/net/Inet6Address.c
jdk/src/solaris/native/java/net/Inet6AddressImpl.c
jdk/src/share/native/java/net/InetAddress.c
jdk/src/solaris/native/java/net/InetAddressImplFactory.c
jdk/src/share/native/java/io/io_util.c
jdk/src/solaris/native/sun/nio/ch/IOUtil.c
jdk/src/share/native/java/io/io_util.h
jdk/src/solaris/native/java/io/io_util_md.c
jdk/src/solaris/native/java/io/io_util_md.h
build/linux-amd64/tmp/java/java.nio/nio/CClassHeaders/java_io_FileDescriptor.h
build/linux-amd64/tmp/java/java.lang/java/CClassHeaders/java_io_FileInputStream.h
build/linux-amd64/tmp/java/java.lang/java/CClassHeaders/java_io_FileOutputStream.h
build/linux-amd64/tmp/java/java.lang/java/CClassHeaders/java_io_FileSystem.h
build/linux-amd64/tmp/java/java.lang/java/CClassHeaders/java_io_ObjectStreamClass.h
build/linux-amd64/tmp/java/java.lang/java/CClassHeaders/java_io_UnixFileSystem.h
build/linux-amd64/tmp/java/java.lang/java/CClassHeaders/java_lang_Double.h
build/linux-amd64/tmp/java/java.lang/java/CClassHeaders/java_lang_Float.h
build/linux-amd64/tmp/java/java.lang/java/CClassHeaders/java_lang_Integer.h
build/linux-amd64/tmp/java/java.lang/java/CClassHeaders/java_lang_Long.h
build/linux-amd64/tmp/java/java.lang/java/CClassHeaders/java_lang_Runtime.h
build/linux-amd64/tmp/java/java.lang/java/CClassHeaders/java_lang_Shutdown.h
build/linux-amd64/tmp/java/java.lang/java/CClassHeaders/java_lang_StrictMath.h
build/linux-amd64/tmp/java/java.lang/java/CClassHeaders/java_lang_String.h
build/linux-amd64/tmp/java/java.lang/java/CClassHeaders/java_lang_System.h
build/linux-amd64/tmp/java/java.lang/java/CClassHeaders/java_lang_Thread.h
build/linux-amd64/tmp/java/java.lang/java/CClassHeaders/java_lang_Throwable.h
build/linux-amd64/tmp/sun/java.net/net/CClassHeaders/java_net_DatagramPacket.h
build/linux-amd64/tmp/sun/java.net/net/CClassHeaders/java_net_Inet4Address.h
build/linux-amd64/tmp/sun/java.net/net/CClassHeaders/java_net_Inet4AddressImpl.h
build/linux-amd64/tmp/sun/java.net/net/CClassHeaders/java_net_Inet6Address.h
build/linux-amd64/tmp/sun/java.net/net/CClassHeaders/java_net_Inet6AddressImpl.h
build/linux-amd64/tmp/sun/java.net/net/CClassHeaders/java_net_InetAddress.h
build/linux-amd64/tmp/sun/java.net/net/CClassHeaders/java_net_InetAddressImplFactory.h
build/linux-amd64/tmp/sun/java.net/net/CClassHeaders/java_net_NetworkInterface.h
build/linux-amd64/tmp/sun/java.net/net/CClassHeaders/java_net_PlainDatagramSocketImpl.h
build/linux-amd64/tmp/sun/java.net/net/CClassHeaders/java_net_PlainSocketImpl.h
build/linux-amd64/tmp/sun/java.net/net/CClassHeaders/java_net_SocketInputStream.h
build/linux-amd64/tmp/sun/java.net/net/CClassHeaders/java_net_SocketOptions.h
build/linux-amd64/tmp/sun/java.net/net/CClassHeaders/java_net_SocketOutputStream.h
jdk/src/share/native/java/lang/java_props.h
jdk/src/solaris/native/java/lang/java_props_md.c
jdk/src/share/native/java/util/zip/Adler32.c as java_util_zip_Adler32.c
jdk/src/share/native/java/util/zip/CRC32.c as java_util_zip_CRC32.c
build/linux-amd64/tmp/sun/java.util.zip/zip/CClassHeaders/java_util_zip_CRC32.h
jdk/src/share/native/java/util/zip/Deflater.c as java_util_zip_Deflater.c
build/linux-amd64/tmp/sun/java.util.zip/zip/CClassHeaders/java_util_zip_Deflater.h
jdk/src/share/native/java/util/zip/Inflater.c as java_util_zip_Inflater.c
build/linux-amd64/tmp/sun/java.util.zip/zip/CClassHeaders/java_util_zip_Inflater.h
jdk/src/share/native/java/util/zip/ZipFile.c as java_util_zip_ZipFile.c
build/linux-amd64/tmp/sun/java.util.zip/zip/CClassHeaders/java_util_zip_ZipFile.h
jdk/src/share/native/java/lang/fdlibm/include/jfdlibm.h
jdk/src/share/native/common/jlong.h
jdk/src/solaris/native/common/jlong_md.h
jdk/src/share/native/common/jni_util.c
jdk/src/share/native/common/jni_util.h
jdk/src/solaris/native/common/jni_util_md.c
jdk/src/share/javavm/export/jvm.h
jdk/src/solaris/javavm/export/jvm_md.h
jdk/src/solaris/native/java/net/linux_close.c
jdk/src/share/native/sun/misc/NativeSignalHandler.c
jdk/src/solaris/native/sun/nio/ch/NativeThread.c
jdk/src/share/native/java/net/net_util.c
jdk/src/share/native/java/net/net_util.h
jdk/src/solaris/native/java/net/net_util_md.c
jdk/src/solaris/native/java/net/net_util_md.h
jdk/src/solaris/native/java/net/NetworkInterface.c
jdk/src/share/native/sun/nio/ch/nio.h
jdk/src/solaris/native/sun/nio/ch/nio_util.h
jdk/src/share/native/java/io/ObjectStreamClass.c
jdk/src/solaris/native/java/net/PlainDatagramSocketImpl.c
jdk/src/solaris/native/java/net/PlainSocketImpl.c
jdk/src/solaris/native/java/lang/ProcessEnvironment_md.c
jdk/src/share/native/java/lang/Runtime.c
jdk/src/share/native/java/lang/Shutdown.c
jdk/src/share/native/sun/misc/Signal.c
jdk/src/solaris/native/java/net/SocketInputStream.c
jdk/src/solaris/native/java/net/SocketOutputStream.c
jdk/src/share/native/java/lang/StrictMath.c
jdk/src/share/native/java/lang/String.c
build/linux-amd64/tmp/java/java.lang/java/CClassHeaders/sun_misc_NativeSignalHandler.h
build/linux-amd64/tmp/java/java.lang/java/CClassHeaders/sun_misc_Signal.h
build/linux-amd64/tmp/sun/java.net/net/CClassHeaders/sun_net_spi_DefaultProxySelector.h
build/linux-amd64/tmp/java/java.nio/nio/CClassHeaders/sun_nio_ch_FileChannelImpl.h
build/linux-amd64/tmp/java/java.nio/nio/CClassHeaders/sun_nio_ch_FileDispatcherImpl.h
build/linux-amd64/tmp/java/java.nio/nio/CClassHeaders/sun_nio_ch_FileKey.h
build/linux-amd64/tmp/java/java.nio/nio/CClassHeaders/sun_nio_ch_IOStatus.h
build/linux-amd64/tmp/java/java.nio/nio/CClassHeaders/sun_nio_ch_IOUtil.h
build/linux-amd64/tmp/java/java.nio/nio/CClassHeaders/sun_nio_ch_NativeThread.h
jdk/src/share/native/java/lang/System.c
jdk/src/share/native/java/lang/Thread.c
jdk/src/share/native/java/lang/Throwable.c
jdk/src/solaris/native/java/io/UnixFileSystem_md.c
jdk/src/solaris/native/java/lang/UNIXProcess_md.c
jdk/src/share/native/java/util/zip/zip_util.c
jdk/src/share/native/java/util/zip/zip_util.h

Change-Id: Ib237df4e1b7b5b4d9f12e74d189e6ec9eed3c31d