The following code shows that when negative time values get large, Date.toString() starts reporting (at least) the years incorrectly. Since Date.toString() is written using SimpleDateFormat(), I presume the bug is there.
class t {
public static void main(String[] args) {
for (long val = -1; val < 0; val *= 2) {
System.out.println("0x" + Long.toHexString(val) + ": " +
val + ":\t" + new java.util.Date(val));
}
}
}
Given the output below, it clearly starts to fail at time 0xffff000000000000 when the year goes BC. It looks (to me) like the sign is just not being put into the year output, but that's just a guess.
0xffffffffffffffff: -1: Wed Dec 31 18:59:59 EST 1969
0xfffffffffffffffe: -2: Wed Dec 31 18:59:59 EST 1969
0xfffffffffffffffc: -4: Wed Dec 31 18:59:59 EST 1969
0xfffffffffffffff8: -8: Wed Dec 31 18:59:59 EST 1969
0xfffffffffffffff0: -16: Wed Dec 31 18:59:59 EST 1969
0xffffffffffffffe0: -32: Wed Dec 31 18:59:59 EST 1969
0xffffffffffffffc0: -64: Wed Dec 31 18:59:59 EST 1969
0xffffffffffffff80: -128: Wed Dec 31 18:59:59 EST 1969
0xffffffffffffff00: -256: Wed Dec 31 18:59:59 EST 1969
0xfffffffffffffe00: -512: Wed Dec 31 18:59:59 EST 1969
0xfffffffffffffc00: -1024: Wed Dec 31 18:59:58 EST 1969
0xfffffffffffff800: -2048: Wed Dec 31 18:59:57 EST 1969
0xfffffffffffff000: -4096: Wed Dec 31 18:59:55 EST 1969
0xffffffffffffe000: -8192: Wed Dec 31 18:59:51 EST 1969
0xffffffffffffc000: -16384: Wed Dec 31 18:59:43 EST 1969
0xffffffffffff8000: -32768: Wed Dec 31 18:59:27 EST 1969
0xffffffffffff0000: -65536: Wed Dec 31 18:58:54 EST 1969
0xfffffffffffe0000: -131072: Wed Dec 31 18:57:48 EST 1969
0xfffffffffffc0000: -262144: Wed Dec 31 18:55:37 EST 1969
0xfffffffffff80000: -524288: Wed Dec 31 18:51:15 EST 1969
0xfffffffffff00000: -1048576: Wed Dec 31 18:42:31 EST 1969
0xffffffffffe00000: -2097152: Wed Dec 31 18:25:02 EST 1969
0xffffffffffc00000: -4194304: Wed Dec 31 17:50:05 EST 1969
0xffffffffff800000: -8388608: Wed Dec 31 16:40:11 EST 1969
0xffffffffff000000: -16777216: Wed Dec 31 14:20:22 EST 1969
0xfffffffffe000000: -33554432: Wed Dec 31 09:40:45 EST 1969
0xfffffffffc000000: -67108864: Wed Dec 31 00:21:31 EST 1969
0xfffffffff8000000: -134217728: Tue Dec 30 05:43:02 EST 1969
0xfffffffff0000000: -268435456: Sun Dec 28 16:26:04 EST 1969
0xffffffffe0000000: -536870912: Thu Dec 25 13:52:09 EST 1969
0xffffffffc0000000: -1073741824: Fri Dec 19 08:44:18 EST 1969
0xffffffff80000000: -2147483648: Sat Dec 06 22:28:36 EST 1969
0xffffffff00000000: -4294967296: Wed Nov 12 01:57:12 EST 1969
0xfffffffe00000000: -8589934592: Tue Sep 23 09:54:25 EDT 1969
0xfffffffc00000000: -17179869184: Sun Jun 15 23:48:50 EDT 1969
0xfffffff800000000: -34359738368: Fri Nov 29 02:37:41 EST 1968
0xfffffff000000000: -68719476736: Sat Oct 28 11:15:23 EDT 1967
0xffffffe000000000: -137438953472: Tue Aug 24 02:30:46 EDT 1965
0xffffffc000000000: -274877906944: Sun Apr 16 09:01:33 EDT 1961
0xffffff8000000000: -549755813888: Wed Jul 30 22:03:06 EDT 1952
0xffffff0000000000: -1099511627776: Wed Feb 27 23:06:12 EST 1935
0xfffffe0000000000: -2199023255552: Thu Apr 26 04:12:24 EDT 1900
0xfffffc0000000000: -4398046511104: Thu Aug 19 12:24:48 EDT 1830
0xfffff80000000000: -8796093022208: Fri Apr 06 04:49:37 EDT 1691
0xfffff00000000000: -17592186044416: Sat Jul 02 13:39:15 EDT 1412
0xffffe00000000000: -35184372088832: Tue Jan 15 06:18:31 EST 0855
0xffffc00000000000: -70368744177664: Sun Feb 11 17:37:02 EST 0261
0xffff800000000000: -140737488355328: Thu Apr 06 16:14:04 EST 2491
0xffff000000000000: -281474976710656: Fri Jul 24 13:28:09 EST 6951
0xfffe000000000000: -562949953421312: Sun Feb 27 07:56:18 EST 15870
0xfffc000000000000: -1125899906842624: Wed May 07 20:52:37 EST 33709
0xfff8000000000000: -2251799813685248: Wed Sep 25 22:45:14 EST 69387
0xfff0000000000000: -4503599627370496: Thu Jul 04 02:30:29 EST 140742
0xffe0000000000000: -9007199254740992: Thu Jan 16 10:00:59 EST 283452
0xffc0000000000000: -18014398509481984: Fri Feb 15 01:01:58 EST 568873
0xff80000000000000: -36028797018963968: Sat Apr 13 07:03:56 EST 1139715
0xff00000000000000: -72057594037927936: Mon Aug 06 19:07:52 EST 2281399
0xfe00000000000000: -144115188075855872: Sat Mar 25 19:15:44 EST 4564766
0xfc00000000000000: -288230376151711744: Tue Jun 29 19:31:28 EST 9131501
0xf800000000000000: -576460752303423488: Mon Jan 09 20:02:56 EST 18264970
0xf000000000000000: -1152921504606846976: Sat Jan 31 21:05:53 EST 36531909
0xe000000000000000: -2305843009213693952: Tue Mar 15 23:11:46 EST 73065787
0xc000000000000000: -4611686018427387904: Tue Jun 11 03:23:32 EST 146133543
0x8000000000000000: -9223372036854775808: Sun Dec 02 16:47:04 EST 292269055
class t {
public static void main(String[] args) {
for (long val = -1; val < 0; val *= 2) {
System.out.println("0x" + Long.toHexString(val) + ": " +
val + ":\t" + new java.util.Date(val));
}
}
}
Given the output below, it clearly starts to fail at time 0xffff000000000000 when the year goes BC. It looks (to me) like the sign is just not being put into the year output, but that's just a guess.
0xffffffffffffffff: -1: Wed Dec 31 18:59:59 EST 1969
0xfffffffffffffffe: -2: Wed Dec 31 18:59:59 EST 1969
0xfffffffffffffffc: -4: Wed Dec 31 18:59:59 EST 1969
0xfffffffffffffff8: -8: Wed Dec 31 18:59:59 EST 1969
0xfffffffffffffff0: -16: Wed Dec 31 18:59:59 EST 1969
0xffffffffffffffe0: -32: Wed Dec 31 18:59:59 EST 1969
0xffffffffffffffc0: -64: Wed Dec 31 18:59:59 EST 1969
0xffffffffffffff80: -128: Wed Dec 31 18:59:59 EST 1969
0xffffffffffffff00: -256: Wed Dec 31 18:59:59 EST 1969
0xfffffffffffffe00: -512: Wed Dec 31 18:59:59 EST 1969
0xfffffffffffffc00: -1024: Wed Dec 31 18:59:58 EST 1969
0xfffffffffffff800: -2048: Wed Dec 31 18:59:57 EST 1969
0xfffffffffffff000: -4096: Wed Dec 31 18:59:55 EST 1969
0xffffffffffffe000: -8192: Wed Dec 31 18:59:51 EST 1969
0xffffffffffffc000: -16384: Wed Dec 31 18:59:43 EST 1969
0xffffffffffff8000: -32768: Wed Dec 31 18:59:27 EST 1969
0xffffffffffff0000: -65536: Wed Dec 31 18:58:54 EST 1969
0xfffffffffffe0000: -131072: Wed Dec 31 18:57:48 EST 1969
0xfffffffffffc0000: -262144: Wed Dec 31 18:55:37 EST 1969
0xfffffffffff80000: -524288: Wed Dec 31 18:51:15 EST 1969
0xfffffffffff00000: -1048576: Wed Dec 31 18:42:31 EST 1969
0xffffffffffe00000: -2097152: Wed Dec 31 18:25:02 EST 1969
0xffffffffffc00000: -4194304: Wed Dec 31 17:50:05 EST 1969
0xffffffffff800000: -8388608: Wed Dec 31 16:40:11 EST 1969
0xffffffffff000000: -16777216: Wed Dec 31 14:20:22 EST 1969
0xfffffffffe000000: -33554432: Wed Dec 31 09:40:45 EST 1969
0xfffffffffc000000: -67108864: Wed Dec 31 00:21:31 EST 1969
0xfffffffff8000000: -134217728: Tue Dec 30 05:43:02 EST 1969
0xfffffffff0000000: -268435456: Sun Dec 28 16:26:04 EST 1969
0xffffffffe0000000: -536870912: Thu Dec 25 13:52:09 EST 1969
0xffffffffc0000000: -1073741824: Fri Dec 19 08:44:18 EST 1969
0xffffffff80000000: -2147483648: Sat Dec 06 22:28:36 EST 1969
0xffffffff00000000: -4294967296: Wed Nov 12 01:57:12 EST 1969
0xfffffffe00000000: -8589934592: Tue Sep 23 09:54:25 EDT 1969
0xfffffffc00000000: -17179869184: Sun Jun 15 23:48:50 EDT 1969
0xfffffff800000000: -34359738368: Fri Nov 29 02:37:41 EST 1968
0xfffffff000000000: -68719476736: Sat Oct 28 11:15:23 EDT 1967
0xffffffe000000000: -137438953472: Tue Aug 24 02:30:46 EDT 1965
0xffffffc000000000: -274877906944: Sun Apr 16 09:01:33 EDT 1961
0xffffff8000000000: -549755813888: Wed Jul 30 22:03:06 EDT 1952
0xffffff0000000000: -1099511627776: Wed Feb 27 23:06:12 EST 1935
0xfffffe0000000000: -2199023255552: Thu Apr 26 04:12:24 EDT 1900
0xfffffc0000000000: -4398046511104: Thu Aug 19 12:24:48 EDT 1830
0xfffff80000000000: -8796093022208: Fri Apr 06 04:49:37 EDT 1691
0xfffff00000000000: -17592186044416: Sat Jul 02 13:39:15 EDT 1412
0xffffe00000000000: -35184372088832: Tue Jan 15 06:18:31 EST 0855
0xffffc00000000000: -70368744177664: Sun Feb 11 17:37:02 EST 0261
0xffff800000000000: -140737488355328: Thu Apr 06 16:14:04 EST 2491
0xffff000000000000: -281474976710656: Fri Jul 24 13:28:09 EST 6951
0xfffe000000000000: -562949953421312: Sun Feb 27 07:56:18 EST 15870
0xfffc000000000000: -1125899906842624: Wed May 07 20:52:37 EST 33709
0xfff8000000000000: -2251799813685248: Wed Sep 25 22:45:14 EST 69387
0xfff0000000000000: -4503599627370496: Thu Jul 04 02:30:29 EST 140742
0xffe0000000000000: -9007199254740992: Thu Jan 16 10:00:59 EST 283452
0xffc0000000000000: -18014398509481984: Fri Feb 15 01:01:58 EST 568873
0xff80000000000000: -36028797018963968: Sat Apr 13 07:03:56 EST 1139715
0xff00000000000000: -72057594037927936: Mon Aug 06 19:07:52 EST 2281399
0xfe00000000000000: -144115188075855872: Sat Mar 25 19:15:44 EST 4564766
0xfc00000000000000: -288230376151711744: Tue Jun 29 19:31:28 EST 9131501
0xf800000000000000: -576460752303423488: Mon Jan 09 20:02:56 EST 18264970
0xf000000000000000: -1152921504606846976: Sat Jan 31 21:05:53 EST 36531909
0xe000000000000000: -2305843009213693952: Tue Mar 15 23:11:46 EST 73065787
0xc000000000000000: -4611686018427387904: Tue Jun 11 03:23:32 EST 146133543
0x8000000000000000: -9223372036854775808: Sun Dec 02 16:47:04 EST 292269055
- relates to
-
JDK-4484483 API: java.util.Date class doesn't specify what calendar system to be used
-
- Closed
-
-
JDK-4485134 Date.toString uses the format which doesn't distinguish B.C. dates from A.D.ones
-
- Closed
-
-
JDK-4485137 L10N uses date/time formats which do not distinguish B.C. dates from A.D. ones
-
- Closed
-