Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/363.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java SimpleDataFormat为不同的日期提供不同的时区_Java_Simpledateformat - Fatal编程技术网

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-Then
System.out.println(sdf.getTimeZone())为您提供系统时区。因为这是默认值。正如问题中所述,我已经知道了。如果我在不同的日期执行代码(例如,在英国夏令时之前和之后执行一次),那么你所说的话会有意义。@algiogia因为日期(时间上的一个瞬间)不在英国夏令时。在你的时区中,该日期的英国夏令时称为GMT。