即使在使用" hh"之后,SimpleDateFormat也会在24小时内显示时间。一小时

时间:2015-02-04 10:06:07

标签: java

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,但也没有用。

2 个答案:

答案 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