Java SimpleDateFormat为不同的日期提供不同的时区

时间:2014-11-20 14:49:32

标签: java simpledateformat

解析日期时我有一种奇怪的行为。给定

DateFormat sdf= new SimpleDateFormat("dd/MM/yyyy");

sdf.parse("25/10/2014")返回2014年10月25日00:00:00 BST

,而

sdf.parse("27/10/2014")返回2014年10月27日00:00:00 GMT

由于日光时间的变化,我发现了这一点,但我肯定希望同一个解析器返回相同的时区。或者我错了吗?

2 个答案:

答案 0 :(得分:5)

根据British Summer Time

上的维基百科文章
  

在英国夏令时间(英国夏令时间),英国的民用时间比格林威治标准时间(格林威治标准时间)提前一小时提前,因此晚上有更多的白昼,而早晨则更少

     

BST从3月的最后一个星期日格林威治标准时间01:00开始,到10月的最后一个星期日格林威治标准时间01:00(英国夏令时02:00)结束。

2014年10月的最后一个星期日是26日。因此,TimeZone从英国夏令时改为GMT,如英国所见。

默认TimeZone是您的系统TimeZone,因此当您更改解析器时也是如此。

答案 1 :(得分:0)

来自SimpleDateFormat#parse(String ParsePosition)的文档:

  

TimeZone值可能会被覆盖,具体取决于给定的值   模式和text中的时区值。任何TimeZone   之前通过调用setTimeZone()设置的值   可能需要恢复以进行进一步的操作。

所以:不,解析器并不总是返回相同的时区。