当前位置: 代码迷 >> J2SE >> 请问DateFormat时区有关问题
  详细解决方案

请问DateFormat时区有关问题

热度:141   发布时间:2016-04-23 20:15:14.0
请教DateFormat时区问题
有代码如下:

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