我对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手机中发生,时间在手机中设置正常。
答案 0 :(得分:2)
好的我明白了,“不是凌晨1点就是关键”
问题是解析文本“H”在0-23小时内使用,因为am-pm你应该使用“h”或“ K“强>
最终格式字符串必须是:
"MM/dd/yy hh:mm a"
我认为Java应该发送错误或警告,尝试解析过去的> 12小时,而不是仅仅将其替换为“00”。