我从服务器的日期形式E, dd MMM yyyy HH:mm:ss Z
其中时区是+0200
日期转换:误差随时间
我解析它使用
myFormat.format(serverFormat.parse(dateString));
和我得到的时间错了我自己的格式yyyy-MM-dd HH:mm:ss
:这是一小时前。所以,如果我得到10:00
转换,我得到09:00
。为什么?
我从服务器的日期形式E, dd MMM yyyy HH:mm:ss Z
其中时区是+0200
日期转换:误差随时间
我解析它使用
myFormat.format(serverFormat.parse(dateString));
和我得到的时间错了我自己的格式yyyy-MM-dd HH:mm:ss
:这是一小时前。所以,如果我得到10:00
转换,我得到09:00
。为什么?
我认为,这里的问题是DST - 夏令时。标准是冬季时间。现在是夏天,所以你得到1小时的差异。 您正在使用时区转换语法+0200
,因为它取决于国家/地区,因此它不支持夏令时。
您应该使用时区定义的语言环境特定语法,例如Europe/Amsterdam
而不是+0100
。除了采取TimeZone
类的API来看一看:
inDaylightTime(Date date)
useDaylightTime()
检查最可能是问题原因的返回值的时区。
DateFormat formatter = new SimpleDateFormat("dd MMM yyyy HH:mm:ss z");
formatter.setTimeZone(TimeZone.getTimeZone("GMT+2"));
System.out.println(formatter.format(serverFormat.parse(dateString));
尝试
formatter = new SimpleDateFormat("E, dd MMM yyyy HH:mm:ss Z");
问题是,我在做一个RSS阅读器,所以我不能做任何事情时区的格式,因为它是在饲料中。如果我只是在我的代码中添加缺少的小时,怎么样?我得到了10:00,我加了1,并且得到了正确的日期:11:00 – user1610075
你可以这样做,但你应该小心。你怎么知道要添加或不添加?如果您可能至少知道一些关于rss feed源的区域设置的提示,您可以尝试区分它是否在DST中。否则,你可以做一些假设。例如,说夏令时是从4月1日到10月1日,大多数时候这对大多数国家都是可以的。 – AlexR