【问题标题】:Why SimpleDateFormat HH works differently from hh为什么 SimpleDateFormat HH 与 hh 的工作方式不同
【发布时间】:2014-12-05 09:48:43
【问题描述】:
    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

【问题讨论】:

标签: java simpledateformat date-parsing


【解决方案1】:

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

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

【讨论】:

  • 当然,我现在使用HH:mm 格式,但我想了解它为什么会这样。现在我知道了,谢谢。
猜你喜欢
  • 1970-01-01
  • 2014-03-13
  • 1970-01-01
  • 2022-11-02
  • 2014-09-04
  • 2018-02-23
  • 2018-04-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多