Java SimpleDateFormat无法正常工作

时间:2013-07-04 00:03:51

标签: java android date timezone simpledateformat

我对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手机中发生,时间在手机中设置正常。

1 个答案:

答案 0 :(得分:2)

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

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

最终格式字符串必须是:

"MM/dd/yy hh:mm a"

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