日期格式将第12小时值(hh)解析为00

时间:2010-07-15 05:57:52

标签: java java-date

日期格式将第12小时值(hh)解析为00,同时将格式应用为“yyyy-MM-dd'T'hh:mm:ss”,但它不解析第13个小时到下午1点。 PFB示例代码段。

Date testDate = DateUtil.parse("yyyy-MM-dd'T'hh:mm:ss", "2010-07-09T12:50:58");
你可以告诉我为什么会这样转换吗?

3 个答案:

答案 0 :(得分:8)

您应该使用HH代替hh。前者用于24小时制,后者用于12小时制。

请参阅javadoc for SimpleDateFormat

编辑:请注意问题可能也在另一端。要从java.util.Date获取小时,您可以在Calendar对象上设置它并拨打get(Calendar.HOUR_OF_DAY)。请注意,get(Calendar.HOUR)将为您提供12小时而不是24小时。

答案 1 :(得分:1)

    DateFormat inputFormatter = new SimpleDateFormat(
            "yyyy-MM-dd'T'hh:mm:ss");
    Date date = inputFormatter.parse("2010-07-09T13:50:58");
    DateFormat outputFormatter = new SimpleDateFormat(
            "yyyy-MM-dd'T'hh:mm:ss a");
    System.out.println(outputFormatter.format(date));

输出结果为:

2010-07-09T01:50:58 PM

读取13,并输出01(PM)。

答案 2 :(得分:0)

当您正在阅读带有时区的时间并使用您的语言环境打印时,系统会将时间转换为您在乌拉圭的当地时间。

您需要创建包含自定义区域设置和时区的日历,以保持其一致性:

    public static void main(String[] args) throws ParseException {
    String dateStr = "Tue, 04 Aug 2015 12:09:10 GMT";
    SimpleDateFormat format = new SimpleDateFormat("EEE, dd MMM yyyy HH:mm:ss zzz", Locale.ENGLISH);
    Date d = format.parse(dateStr);
    System.out.println("The current time is: " + d.getHours() + ":" + d.getMinutes() + ":" + d.getSeconds());
    Calendar cal = new GregorianCalendar(TimeZone.getTimeZone("GMT"), Locale.ENGLISH);
    cal.setTime(d);
    System.out.println("The current time is: " + cal.get(Calendar.HOUR_OF_DAY) + ":" + cal.get(Calendar.MINUTE) + ":" + cal.get(Calendar.SECOND));
}