尴尬的Java日期创建行为

sha*_*rik 3 java timezone date

当我尝试创建两个日期时,我刚刚发现了Java的Date类的一个非常奇怪的行为:

Date startDate = new Date(1282863600000L);
System.out.println(startDate);

Date endDate = new Date(1321919999000L);
System.out.println(endDate);
Run Code Online (Sandbox Code Playgroud)

输出分别为:

Fri Aug 27 00:00:00 BST 2010
Mon Nov 21 23:59:59 GMT 2011

有没有人见过这样的东西?两个日期都以相同的方式初始化,但是在打印时,第一个以BST显示,后者以GMT显示?

我试图找到解释,但我没有.有人能帮我吗?

提前致谢!

McD*_*ell 5

这是记录在案的行为.

来自Date.toString():

将此Date对象转换为表单的String:

 dow mon dd hh:mm:ss zzz yyyy
Run Code Online (Sandbox Code Playgroud)

zzz是时区(可能反映夏令时).标准时区缩写包括方法解析识别的缩写.如果时区信息不可用,zzz则为空 - 也就是说,它根本不包含任何字符.

您正在使用使用英国夏令时的区域设置并创建应用日光保存规则的日期.这将是当时对本地用户的预期日期形式.