Accoridng to SimpleDateFormat
,
如果我将使用hh
一小时,那么我将在上午/下午得到时间,所以我正在尝试这个,
SimpleDateFormat sdf = new SimpleDateFormat("MMM dd yyyy hh:mm:ss Z");
System.out.println(sdf.parse("Jan 30 2014 09:07:32 GMT").toString());
但上述解析日期的输出仍为24小时格式,而不是上午12点/小时。
如果我使用hh
代替HH
,为什么我的输出不正确?
我已经尝试了KK
,但也没有用。
答案 0 :(得分:4)
但上述解析日期的输出仍为24小时格式,而不是上午12点/小时。
您已使用hh
解析值,但输出正是您通过调用Date.toString()
得到的:
将此Date对象转换为以下形式的字符串:
dow mon dd hh:mm:ss zzz yyyy
其中:
... hh是一天中的小时(00到23),为两位小数。
使用12小时的时间解析的事实与Date.toString()
的输出无关。 Date
对格式,时区或日历没有任何线索 - 它只是只是的瞬间。 (内部,自Unix纪元以来的毫秒数。)
如果您需要以特定格式将Date
转换为String
,则应使用DateFormat.format
来执行此操作。
我也强烈阻止您使用使用hh
但没有AM / PM指示符的解析格式 - 您真的只希望能够表示发生在早上好吗?
您确实确定您的输入数据是12小时格式吗?对我来说似乎不太可能 - 特别是当小时为零填充时,通常表示它是24小时格式。缺乏AM / PM说明符再次表明了这一点。
答案 1 :(得分:2)
我得到Thu Jan 30 10:07:32 CET 2014
。这是因为Date::toString()
以本地化表示形式返回日期。要获得所需的输出,您必须使用另一个DateFormat
,如下所示:
SimpleDateFormat dateFormatForParsing = new SimpleDateFormat("MMM dd yyyy hh:mm:ss Z");
SimpleDateFormat dateFormatForOutput = new SimpleDateFormat("ha");
Date parsedDate = dateFormatForParsing.parse("Jan 30 2014 09:07:32 GMT");
System.out.println(dateFormatForOutput.format(parsedDate));
这会输出10AM
。