2011-10-20 46 views
0

我正在使用下面的代码来解析一个字符串到日期GMT-> EDT。我不明白我看到的结果。与格林威治标准时间解析的意外结果

 SimpleDateFormat dformat = new SimpleDateFormat("yyyyMMdd-hh:mm:ss"); 
     TimeZone gmt = TimeZone.getTimeZone("GMT"); 
     dformat.setTimeZone(gmt); 
     Date d = dformat.parse(time); 

如果时间= “20111019-13:00:00”,则d结束是星期三10月19日九时00分00秒EDT 2011.然而,如果时间= “20111019-12:59:59” ,d某种程度上结束了2011年10月18日星期二20:59:59 EDT。这怎么可能?

回答

1

您的意思是HH:mm:ss为时间组件,而不是hh:mm:ss。它使用了12小时制,并且将12:59:59解释为00:59:59。

请注意,您的分析呢执行转换到一个特定的时间段 - 因为Date不知道时区。您只看到EDT,因为(我怀疑)您打印的是d.toString(),它始终使用当地时区。

Java的日期/时间API是相当可怕的 - 如果你能有可能,我会强烈建议你移动到Joda Time相反,在那里你可以使用一个DateTime有一个时区...,让你在它们之间转换。

+0

对不起,我忽略了实际转换的代码,当我注意到问题出现在我发布的部分时。有道理,谢谢!我也不是日期功能的粉丝,但这是我唯一的选择。 – Sarah

相关问题