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

标签 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 格式?

prooflink

最佳答案

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

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

关于java - 为什么 SimpleDateFormat HH 与 hh 的工作方式不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27313028/

相关文章:

java - 带日历的时区

java - 使用 JSpinner 获取值

python - pandas, Python 中 "Jul 07, 2019"的日期解析代码

java - Arquillian 运行模式

java - elasticsearch 6 中的模糊建议

java - 获取正确的月份格式日期java

mysql - 在 MySQL 中解析日期

java - 如何制作一个接受尾随垃圾的 DateTimeFormatter?

java - 从 Hashmap 中删除元素

java - Redis 使用对象引用吗?