Java 用“解析日期”;yyyy MM dd hh:MM:ss“;图案

Java 用“解析日期”;yyyy MM dd hh:MM:ss“;图案,java,date,simpledateformat,Java,Date,Simpledateformat,我面临着“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

我面临着“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);
    }
我得到以下输出

2018年8月16日星期四11:00:00 UTC

2018年8月16日星期四00:00:00 UTC

2018年8月16日星期四13:00:00 UTC

我不明白“2018-08-16 12:00:00”的第二个输出为什么说是2018年8月16日星期四00:00:00 UTC,而不是2018年8月16日星期四12:00:00 UTC

查看文档中的日期解析模式。上面说

小时->上午/下午的小时数(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);
}
输出

2018年8月16日星期四11:00:00 IST
2018年8月16日星期四12:00:00 IST

2018年8月16日星期四13:00:00 IST

您应该使用
H
代替
hh
,用于
一天中的小时(0-23)

TestP: 输出:
文档:

您有以下行的更改

SimpleDateFormat sdf = 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

没有
am
/
pm
值,什么是
12
?我还建议您应该使用Java 8中引入的新日期/时间尝试引入am/PMO,或者将格式化程序改为使用
H
。此外,如果您使用
SimpleDateFormat
(和相同的格式)来
格式化
,结果将打印
2018-08-16 12:00
:/-记住,
Date#toString
有自己的内部机制来格式化它的表示形式,我建议您避免使用
SimpleDataFormat
类。它不仅早已过时,而且还出了名的麻烦。今天,我们在。
AddRotatedAnnotation
?仅供参考,非常麻烦的旧日期时间类,如,
java.text.simpleDataFormat
,现在被java 8和更高版本中内置的类所取代。看见
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