java - SimpleDateFormat - 时区不正确
问题描述
我在解析 Java 中的时间戳时遇到问题。
我希望两个时间戳都在同一个时区(CET)中。
SimpleDateFormat sdaf = new SimpleDateFormat ("dd.MM.yyyy HH:mm:ss");
String str = "30.03.2013 06:00:00";
sdaf.setTimeZone (TimeZone.getTimeZone ("CET"));
java.util.Date dat = sdaf.parse (str);
System.out.println (str + " = " + dat);
str = "31.03.2013 05:00:00";
sdaf.setTimeZone (TimeZone.getTimeZone ("CET"));
dat = sdaf.parse (str);
System.out.println (str + " = " + dat);
但事实并非如此 - 请参阅输出。
30.03.2013 06:00:00 = Sat Mar 30 06:00:00 CET 2013
31.03.2013 05:00:00 = Sun Mar 31 05:00:00 CEST 2013
编辑:
如果我用 GMT+1 更改 CET,我会得到这个。
03.2013 06:00:00 = Sat Mar 30 06:00:00 CET 2013
31.03.2013 05:00:00 = Sun Mar 31 06:00:00 CEST 2013
似乎是正确的。但是为什么 CET 不起作用?
UTC+1 产生
30.03.2013 06:00:00 = Sat Mar 30 07:00:00 CET 2013
31.03.2013 05:00:00 = Sun Mar 31 07:00:00 CEST 2013
与 GMT+1 有何不同 - ????
解决方案
您无法获得31.03.2013 05:00:00CET
的时区,因为它不再位于该时区。要了解,只需检查两个时区的名称
- CET :中欧时间(
UTC+1
或GMT+1
) - CEST :中欧夏令时(
UTC+2
或GMT+2
)
这是 2013 年 3 月 31 日 02:00:00 期间发生的夏令时。因此,您无法获得CET
第二个日期的时区,因为它位于夏季“时区”。
如果你解析31.03.2013 02:00:00
你会得到
2013 年 3 月 31 日 02:00:00 = 2013 年 3 月 31 日星期日 03:00:00 CEST
因为在当天的 02:00:00,夏令时发生了,变成了 03:00:00。
您可以使用TimeZone.inDaylightTime(Date)
String str = "30.03.2013 06:00:00";
java.util.Date dat = sdaf.parse (str);
System.out.println (str + " = " + dat);
System.out.println("SDT : " + TimeZone.getTimeZone("CET").inDaylightTime(dat));
2013 年 3 月 30 日 06:00:00 = 2013 年 3 月 30 日星期六 06:00:00 CET 2013
SDT:假
str = "31.03.2013 02:00:00";
dat = sdaf.parse (str);
System.out.println (str + " = " + dat);
System.out.println("SDT : " + TimeZone.getTimeZone("CET").inDaylightTime(dat));
2013 年 3 月 31 日 02:00:00 = 2013 年 3 月 31 日星期日 03:00:00 CEST
SDT:真
由于与orCET
相同并成为or ,因此当您强制日期为 on 时,您将获得等效的 the ,但不考虑 SDT 参数。UTC+1
GMT+1
CEST
UTC+2
GMT+2
GMT+1
CET
注意:这是大多数处理过程中LocalDateTime
不打扰的原因之一。TimeZone
推荐阅读
- java - 如何使用 AgentBuilder 替换类的方法
- java - 无法使用 MySQL 从 GlassFish 5 服务器中的模型 @Entity 类生成数据库模式
- c# - ASP.NET MVC 和实体框架自定义 getter 设置器不起作用
- linux - 如果我删除 /Dev 文件会发生什么
- javascript - 响应书签栏的 CSS
- django - 保存模型对象时,如何创建由 FileFields/ImageFields 选择的压缩文件?
- c++ - 在函数中而不是在文件开头初始化静态变量
- excel - 如何在 Excel 中设置动态范围
- javascript - 角度 ngif 不随变量而变化
- javascript - 打字稿根据给定值返回键数组