【问题标题】:Parsing of 24hr date format doesn't work as expected when time is in 12th hr(12-1 PM) [duplicate]当时间为 12 小时(下午 12 点至下午 1 点)时,24 小时日期格式的解析无法按预期工作 [重复]
【发布时间】:2019-10-19 22:24:26
【问题描述】:

我正在使用以下代码将文本解析为日期数据类型并获取相应的长值。

import java.text.DateFormat
import java.text.SimpleDateFormat

String TIMEZONE_DATE_FORMAT = "yyyy-MM-dd'T'hh:mm:ssZ";
DateFormat df = new SimpleDateFormat(TIMEZONE_DATE_FORMAT);
Date date = df.parse("2015-09-21T12:48:00+0000");
date.getTime();

在上述情况下,我得到getTime() 值:1442796480000,即12:48 AM(GMT)。但我期待12:48 PM 是它的 24 小时格式。

当我对文本日期使用相同的代码时:2015-09-21T13:48:00+0000,我得到的是正确的下午 1:48。

我是否使用了错误的日期格式?

【问题讨论】:

  • 24 小时制,00:48 应该是 12:48 AM,12:48 应该是 12:48 PM 对吧?这就是我的想法
  • 摆脱 java.Date。它是在 java 类中转世的路西法
  • 从 Egeo 得到答案,HH 而不是 hh。这对我有用。如果使用hh,13:48 不会将错误作为无效日期字符串抛出,这仍然很奇怪。
  • 默认情况下,日期解析是宽松的。这意味着它无论如何都会尝试(并且可能会产生意想不到的结果)。来自documentation: "默认情况下,解析是宽松的:如果输入的不是这个对象的format方法使用的形式,但仍然可以解析为日期,则解析成功。客户可能坚持严格通过调用 setLenient(false) 来遵守格式。"
  • 像@aran 我建议你不要使用SimpleDateFormatDate。这些类设计不良且过时,尤其是前者,尤其是出了名的麻烦。而是使用来自java.time, the modern Java date and time APIOffsetDateTimeDateTimeFormatter

标签: java simpledateformat


【解决方案1】:

对于 24 小时,模式应该是 HH 而不是 hh

【讨论】:

  • 谢谢,这行得通 :) 但奇怪的是,如果使用 hh,13:48 不会作为无效日期字符串抛出错误。
  • @BikasKatwal 我同意,SimpleDateFormat 很奇怪。我不想使用它。
【解决方案2】:

试试这个:

Date date = new Date();
date.setHours(date.getHours() + 8);
System.out.println(date);
SimpleDateFormat simpDate;
simpDate = new SimpleDateFormat("kk:mm:ss");
System.out.println(simpDate.format(date));

对我来说效果很好! :)

【讨论】:

  • 明确一点,kk 不是从零开始的。它从 1 变为 24,这可能不是您想要的。
猜你喜欢
  • 2019-04-12
  • 1970-01-01
  • 2012-03-20
  • 2012-12-03
  • 2018-09-20
  • 1970-01-01
  • 1970-01-01
  • 2012-01-10
  • 2011-11-16
相关资源
最近更新 更多