【问题标题】:when hour = 12,it parses to 00, why?当小时 = 12 时,它解析为 00,为什么?
【发布时间】:2022-01-12 07:12:22
【问题描述】:

当我要与new Date().getTime() 做多时,我发现当时间> 11:59:59 时,它总是解析为00:xx:xx,例如; 12:00:00 --> 00:00:00, 12:23:56 --> 00:23:56;

SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
Date parse = null;
try {
    parse = format.parse(str);
    log.debug("time{}", parse);
} catch (ParseException e) {
    e.printStackTrace();
}

str = "2022-01-12 11:59:59" 运行良好;
str = "2022-01-12 12:00:00" 效果不佳时,它给了我 00:00:00;
str = "2022-01-12 12:15:00" 效果不佳时,它给了我 00:15:00;
str = "2022-01-12 13:15:00" 运行良好时,它给了我 13:00:00;

【问题讨论】:

  • 因为在午夜,新的一天开始了
  • 您将日期解析为 1-12 小时字符串并将其打印为 0-23 小时字符串。你期待什么。 12 AM == 00 24 小时制。
  • SimpleDateFormat - 你为什么还在使用?

标签: java date parsing simpledateformat


【解决方案1】:

如果您检查 doc 的 SimpleDateFormat,

h == 上午/下午 (1-12) 小时

所以中午 12 点是午夜。

如果你想要一个 24 小时的时间,大写的 'H' 而不是小写的 'h' 来表示小时

H == 一天中的小时 (0-23)

【讨论】:

    【解决方案2】:

    tl;博士

    LocalDateTime.parse( "2022-01-12 12:15:00".replace( " " , "T" ) )
    

    详情

    正如其他人所说,您的格式模式不正确,因为它使用 hh 表示 12 小时制而不是 HH 表示 24 小时制。

    此外,您正在使用糟糕的遗留日期时间类,这些类在几年前被 JSR 310 中定义的现代 java.time 类所取代。

    您的输入字符串几乎符合日期时间字符串的 ISO 8601 标准。将中间的空格替换为T

    String input = "2022-01-12 12:15:00".replace( " " , "T" ) ;
    

    解析为LocalDateTime。无需指定格式模式。

    LocalDateTime ldt = LocalDateTime.parse( input ) ;
    

    【讨论】:

      【解决方案3】:

      我知道了,应该是 hh:mm:ss ---> HH:mm:ss

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-11-30
        • 1970-01-01
        • 2018-08-08
        • 1970-01-01
        • 1970-01-01
        • 2014-04-16
        • 1970-01-01
        相关资源
        最近更新 更多