【发布时间】: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 我建议你不要使用
SimpleDateFormat和Date。这些类设计不良且过时,尤其是前者,尤其是出了名的麻烦。而是使用来自java.time, the modern Java date and time API 的OffsetDateTime和DateTimeFormatter。
标签: java simpledateformat