有代码如下:
import java.text.*;
class Test1 {
public static void main(String[] args) {
DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss z Z");
System.out.println("Epoc:\t\t\t" + df.format(0));
System.out.println("Epoc + 1000 days:\t" + df.format(1000L * 3600 * 24 * 1000));
System.out.println("Epoc + 10000 days:\t" + df.format(1000L * 3600 * 24 * 10000));
System.out.println("Epoc + 100000 days:\t" + df.format(1000L * 3600 * 24 * 100000));
}
}
输出如下:
Epoc: 1970-01-01 08:30:00 CST +0830
Epoc + 1000 days: 1972-09-27 08:30:00 CST +0830
Epoc + 10000 days: 1997-05-19 08:00:00 CST +0800
Epoc + 100000 days: 2243-10-17 08:00:00 CST +0800
我的问题是为什么前两行和后两行采用的时区不一样?
------解决思路----------------------
很巧,我用 JDK 7 x86 版本试了下,
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss z Z");
System.out.println("Epoc:\t\t\t" + df.format(new Long(0)));
System.out.println("Epoc + 1000 days:\t" + df.format(new Long(1000L * 3600 * 24 * 1000)));
System.out.println("Epoc + 10000 days:\t" + df.format(new Long(1000L * 3600 * 24 * 10000)));
System.out.println("Epoc + 100000 days:\t" + df.format(new Long(1000L * 3600 * 24 * 100000)));
得到:
Epoc: 1970-01-01 08:00:00 CST +0800
Epoc + 1000 days: 1972-09-27 08:00:00 CST +0800
Epoc + 10000 days: 1997-05-19 08:00:00 CST +0800
Epoc + 100000 days: 2243-10-17 08:00:00 CST +0800

------解决思路----------------------

Epoc: 1970-01-01 08:00:00 CST +0800
Epoc + 1000 days: 1972-09-27 08:00:00 CST +0800
Epoc + 10000 days: 1997-05-19 08:00:00 CST +0800
Epoc + 100000 days: 2243-10-17 08:00:00 CST +0800