Migration of ZoneInfo to 64-bit times from 32-bit
This commit migrates libcore.util.ZoneInfo to use 64-bit time data where
it has previously used only 32-bit data. This will (in future) allow
Android's java.util.TimeZone to provide time zone transition information
beyond 2038. Right now, even with 64-bit data the zone info compiler
(zic) that creates Android's data file does not generate timestamps
higher than the 32-bit range by default. However, as of 2019a, this is
configurable via the "-r" command-line flag.
Android has, until now, used the first part of each TZif file ZoneInfo,
its standard implementation of java.util.TimeZone. This section of the
file uses signed 32-bit values for times (in seconds) and is therefore
limited to providing information from 1901/12/13 20:45:53 GMT until
2038/01/19 03:14:07 GMT.
Users of java.util.TimeZone would typically only notice this as "missing"
information outside of the supported signed int32 seconds range which
could lead to incorrect offset / is DST? values before
1901/12/13 20:45:53 GMT. This was because there is a single "before
time begins" offset type, and any information between the earliest known
time and 1901/12/13 20:45:53 GMT could not be represented. This typically
affected zones where records begin before 1901.
Users of android.text.format.Time (which is backed by ZoneInfo for time
zone calcs) are still limited to date / times in the signed int32 seconds
range by design and this change is not intended alter the Time behavior.
Along with this change various tests have been updated. This is mainly
around comments which described 32-bit behavior of zic that is no longer
relevant. The only behavior change is in
TimeZoneTest.testOverflowing32BitUnixDates() to correct the offset
expected before Integer.MIN_VALUE seconds.
Bug: 73719425
Test: CTS: CtsLibcoreTestCases
Test: CTS: CtsIcuTestCases
Test: CTS: CtsTextTestCases
Test: CTS: CtsLibcoreOjTestCases
Change-Id: I8014c5fa63651fc0f131a90857bef645aa2aacd5
5 files changed