2012-09-02 49 views
0

我从服务器的日期形式E, dd MMM yyyy HH:mm:ss Z其中时区是+0200日期转换:误差随时间

我解析它使用

myFormat.format(serverFormat.parse(dateString)); 

和我得到的时间错了我自己的格式yyyy-MM-dd HH:mm:ss:这是一小时前。所以,如果我得到10:00转换,我得到09:00。为什么?

回答

1

我认为,这里的问题是DST - 夏令时。标准是冬季时间。现在是夏天,所以你得到1小时的差异。 您正在使用时区转换语法+0200,因为它取决于国家/地区,因此它不支持夏令时。

您应该使用时区定义的语言环境特定语法,例如Europe/Amsterdam而不是+0100。除了采取TimeZone类的API来看一看:

  • inDaylightTime(Date date)
  • useDaylightTime()
+0

问题是,我在做一个RSS阅读器,所以我不能做任何事情时区的格式,因为它是在饲料中。如果我只是在我的代码中添加缺少的小时,怎么样?我得到了10:00,我加了1,并且得到了正确的日期:11:00 – user1610075

+0

你可以这样做,但你应该小心。你怎么知道要添加或不添加?如果您可能至少知道一些关于rss feed源的区域设置的提示,您可以尝试区分它是否在DST中。否则,你可以做一些假设。例如,说夏令时是从4月1日到10月1日,大多数时候这对大多数国家都是可以的。 – AlexR

0

检查最可能是问题原因的返回值的时区。

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)); 
0

尝试

formatter = new SimpleDateFormat("E, dd MMM yyyy HH:mm:ss Z");