Java SimpleDataFormat为不同的日期提供不同的时区
我在分析日期时有一种奇怪的行为。给定Java SimpleDataFormat为不同的日期提供不同的时区,java,simpledateformat,Java,Simpledateformat,我在分析日期时有一种奇怪的行为。给定 DateFormat sdf= new SimpleDateFormat("dd/MM/yyyy"); sdf.parse(“25/10/2014”)返回2014年10月25日00:00:00BST 当 sdf.parse(“27/10/2014”)返回2014年10月27日00:00:00GMT 我发现这是因为昼间的变化,但我肯定希望相同的解析器返回相同的时区。还是我错了?根据维基百科关于 在英国夏令时(BST),英国的民用时间比格林威治标准时间(GMT
DateFormat sdf= new SimpleDateFormat("dd/MM/yyyy");
sdf.parse(“25/10/2014”)
返回2014年10月25日00:00:00BST
当
sdf.parse(“27/10/2014”)
返回2014年10月27日00:00:00GMT
我发现这是因为昼间的变化,但我肯定希望相同的解析器返回相同的时区。还是我错了?根据维基百科关于 在英国夏令时(BST),英国的民用时间比格林威治标准时间(GMT)提前一个小时,因此晚上白天多,早晨白天少 英国夏令时开始于3月最后一个星期日格林尼治标准时间01:00,结束于10月最后一个星期日格林尼治标准时间01:00(英国夏令时02:00) 2014年10月的最后一个星期日是26日。因此,时区从英国夏季时间改为英国格林尼治标准时间
默认时区是您的系统时区,因此当更改时,您的解析器也将更改。来自
SimpleDateFormat#parse(String ParsePosition)
的文档:
时区
值可能会被覆盖,具体取决于给定的时间
模式和文本中的时区值。任何时区
以前通过调用setTimeZone()
可能需要恢复以进行进一步操作
因此:不,解析器并不总是返回相同的时区。您的代码示例是相同的。在第二个解析示例中,不是应该是27而不是25吗?我最近遇到了一个可能相关的问题。谢谢@Pshemo。修正了。我没有设置任何时区。@algiogia-ThenSystem.out.println(sdf.getTimeZone())代码>为您提供系统时区。因为这是默认值。正如问题中所述,我已经知道了。如果我在不同的日期执行代码(例如,在英国夏令时之前和之后执行一次),那么你所说的话会有意义。@algiogia因为日期(时间上的一个瞬间)不在英国夏令时。在你的时区中,该日期的英国夏令时称为GMT。