1

我对 SimpleDateFormat 有一个奇怪的问题,问题是日期格式化程序没有将日期解析到我的 TimeZone 中,即使 TimeZone.getDefault() 给了我正确的 TimeZone。

如果这还不够,我运行以下命令并得到以下结果(在评论中):

SimpleDateFormat df = new SimpleDateFormat("MM/dd/yy HH:mm a");

Date now = new Date();          
System.out.println(now);                            //   Wed Jul 03 18:58:37 CDT 2013
System.out.println(df.format(now));                 //   07/03/13 18:58 PM   (ok)
System.out.println(df.parse("07/03/13 18:58 PM"));  //   Wed Jul 03 00:58:00 CDT 2013 (not ok)
System.out.println(df.parse(df.format(now)));       //   Wed Jul 03 00:58:00 CDT 2013

这怎么可能??我什至不确定 df.parse 方法在做什么,因为生成的时间永远不会超过凌晨 1 点,我的意思是,那是在 18:58,但现在我的时间是 7:32,我仍然得到 00:32而不是 1:32。

我错过了什么吗?字符串日期是从服务器获取的,它们的格式不能更改,因为它们用于其他已经生产的服务。

这发生在Android手机中,时间在手机中设置好。

4

1 回答 1

2

好的,我明白了,“不超过凌晨 1 点是关键”

问题是解析文本“H”在 0-23 小时内使用,对于 am-pm 你应该使用“h”“K”

最终的格式字符串必须是:

"MM/dd/yy hh:mm a"

我认为 Java 应该发送错误或警告来尝试解析过去 >12 小时,而不是仅仅将其替换为“00”。

于 2013-07-04T00:43:03.897 回答