为什么SimpleDateFormat HH的工作方式与hh不同

时间:2014-12-05 09:48:43

标签: java simpledateformat date-parsing

    final String sourceDate = "05.12.2014 12:17";
    final String testDate = "05.12.2014 13:17";
    final SimpleDateFormat originalSDF = new SimpleDateFormat("dd.MM.yyyy hh:mm");
    final SimpleDateFormat testSDF = new SimpleDateFormat("dd.MM.yyyy HH:mm");

    System.out.println(originalSDF.parse(sourceDate).toString());
    System.out.println(testSDF.parse(sourceDate).toString());
    System.out.println("=====================");
    System.out.println(originalSDF.parse(testDate).toString());
    System.out.println(testSDF.parse(testDate).toString());

输出结果为:

Fri Dec 05 00:17:00 GMT 2014
Fri Dec 05 12:17:00 GMT 2014
=====================
Fri Dec 05 13:17:00 GMT 2014
Fri Dec 05 13:17:00 GMT 2014

为什么这些格式的工作原理相同,但12:*的工作方式不同,hh:mm解析为12h格式,HH:mm解析为24h格式?< / p>

prooflink

1 个答案:

答案 0 :(得分:1)

如果您使用originalSDF.setLenient(false),那么解析"05.12.2014 13:17"将引发异常......基本上处于宽松模式,hh被视为HH(即24小时)值)当值大于12 时(可能是当它为0时)。

就我个人而言,我认为默认为宽松模式是一个坏主意,但这是另一回事......基本上你的格式应该总是适合你的数据。如果您要获得13:17的值,那么您应该使用HH:mm。