使用 "yyyy-MM-dd hh:mm:ss" 模式解析日期

parsing date with "yyyy-MM-dd hh:mm:ss" pattern

我遇到 "yyyy-MM-dd hh:mm:ss" 日期解析模式的奇怪行为。 下面是我的代码。

    public static void main(String[] args) throws Exception {
        System.out.println(parseDate("2018-08-16 11:00:00"));
        System.out.println(parseDate("2018-08-16 12:00:00"));
        System.out.println(parseDate("2018-08-16 13:00:00"));
    }

    public static Date parseDate(String date) throws Exception {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
        return sdf.parse(date);
    }

我得到以下输出

Thu Aug 16 11:00:00 UTC 2018

Thu Aug 16 00:00:00 UTC 2018

Thu Aug 16 13:00:00 UTC 2018

我不明白为什么“2018-08-16 12:00:00”的第二个输出是 Thu Aug 16 00:00:00 UTC 2018 而不是 Thu Aug 16 12:00:00 UTC 2018.

查看来自 here 的日期解析模式文档。它说

h -> Hour in am/pm (1-12)

有人可以解释一下吗? 感谢期待。

希望对您有所帮助

public static void main(String[] args) throws Exception {
    System.out.println(parseDate("2018-08-16 11:00:00 AM"));
    System.out.println(parseDate("2018-08-16 12:00:00 PM"));
    System.out.println(parseDate("2018-08-16 13:00:00 AM"));
}

public static Date parseDate(String date) throws Exception {
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss a");
    return sdf.parse(date);
}

输出

Thu Aug 16 11:00:00 IST 2018 Thu Aug 16 12:00:00 IST 2018 Thu Aug 16 13:00:00 IST 2018

对于 Hour in day (0-23),您应该使用 H 而不是 hh :

测试P:

public class TestP{
    public static void main(String[] args) throws Exception {
        System.out.println(parseDate("2018-08-16 11:00:00"));
        System.out.println(parseDate("2018-08-16 12:00:00"));
        System.out.println(parseDate("2018-08-16 13:00:00"));
        System.out.println(parseDate("2018-08-16 23:00:00"));
    }

    public static Date parseDate(String date) throws Exception {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd H:mm:ss");
        return sdf.parse(date);
    }
}

输出:

Thu Aug 16 11:00:00 CLST 2018
Thu Aug 16 12:00:00 CLST 2018
Thu Aug 16 13:00:00 CLST 2018
Thu Aug 16 23:00:00 CLST 2018

文档:SimpleDateFormat

您已更改以下行

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");

DateFormat writeFormat = new SimpleDateFormat( "yyyy-MM-dd HH:mm:ss");

小时日期格式如下,

kk :- Hours in 1-24 format
hh :- hours in 1-12 format
KK :- hours in 0-11 format
HH :- hours in 0-23 format