当日期中包含EDT / EST时,我们是否有任何API可以验证日期是否有效。我已经尝试过用Java Java
SimpleDateFormat进行Joda,但是我无法解析日期。
下面是我正在获取“ 2017/09/25 16:18:15.099 -0400 EDT”的示例格式。
任何帮助表示赞赏。
谢谢,sk
您是否尝试阅读文档?
从以下文档中DateTimeFormatter
:
z time-zone name zone-name Pacific Standard Time; PST
x zone-offset offset-x +0000; -08; -0830; -08:30; -083015; -08:30:15;
区域名称 :这将输出时区ID的显示名称。如果字母数为一,二或三,则输出简称。…
偏移X和x :这将根据图案字母的数量设置偏移格式。…两个字母输出小时和分钟,不带冒号,例如’+0130’。…
因此,我们尝试:
ZonedDateTime zdt = ZonedDateTime.parse("2017/09/25 16:18:15.099 -0400 EDT",
DateTimeFormatter.ofPattern("uuuu/MM/dd HH:mm:ss.SSS xx zzz", Locale.ENGLISH));
产生ZonedDateTime
的2017-09-25T16:18:15.099-04:00[America/New_York]
。
验证方式
在上面的代码中,ZonedDateTime
从字符串中选取时区,并忽略偏移量。为了验证两者是否一致,我们可以将相同的字符串解析为a
ZonedDateTime
和an OffsetDateTime
并进行比较。后者获取偏移量,并忽略时区缩写,因此可以使用:
String inputDateTimeWithZone = "2017/09/25 16:18:15.099 -0400 EDT";
DateTimeFormatter formatterWithOffsetAndZone
= DateTimeFormatter.ofPattern("uuuu/MM/dd HH:mm:ss.SSS xx zzz", Locale.ENGLISH);
ZonedDateTime zdt = ZonedDateTime.parse(inputDateTimeWithZone,
formatterWithOffsetAndZone);
OffsetDateTime odt = OffsetDateTime.parse(inputDateTimeWithZone,
formatterWithOffsetAndZone);
if (! zdt.toOffsetDateTime().equals(odt)) {
System.err.println("Offset does not match: is " + odt.getOffset()
+ ", but time zone " + zdt.getZone() + " implies offset " + zdt.getOffset());
}
尽量避免使用三个字母的时区缩写
EST和EDT还可分别用于澳大利亚东部标准时间和夏令时。三个字母的时区缩写不标准化,并且常常不明确。如果您可以获取具有时区ID的 地区/城市
格式的字符串(例如America / New_York),或者只是删除缩写并仅依赖偏移量,则这样做会更安全,因为这是明确的。
现代Java日期和时间API
今天,我推荐java.time
在Joda-Time上使用AKA
JSR-310,当然在长期过时的课程上SimpleDateFormat
也是如此Date
。对我来说,使用它非常好,而且当然不会像以前那样令人惊讶。它是Java
8和更高版本内置的。如果使用Java 6或7,则一开始可能会考虑使用Joda-Time,但是如果您准备接受外部依赖关系,为什么不采用ThreeTen
Backport,即java.time
Java 6和7 的backport
?
我正在尝试在中解析这些日期,然后获取表示形式。 我阅读了这个类似的答案,并创建了一个方法来解析上述日期并返回具有所需格式的: 然而,没有一个图案是匹配的。我这里缺少什么? 更新:在这两个日期中,我都收到了字符的异常。
问题内容: 无论如何,是否可以验证给定日期(yyyy-MM- dd)是否为有效日期?它也应该处理leap年。例如(2015-02-29)应该无效。我将日期作为字符串检索,并将其放入joda DateTime对象。 问题答案: 我认为,这应该对您有用(如果您想保持简单)。 你必须做一个。
我想以我用命令设置的格式传入日期。这是我到目前为止所尝试的。不理解无效月份错误。我在用10克。 数据库时区为UTC 我设置了会话时区和日期格式
使用spring我有这个endpoint, 带有日期字段的对象的Spring验证失败
我正在尝试将日期插入我的PostgreSQL数据库。以下是我在java应用程序中解析日期的方式: 在我的PostgreSQL数据库中。我将其作为带有时区的。处理和插入它的理想方式是什么? 数据库期望的示例。
我有一个带时区的日期(如2014年3月21日08:00:00)(“如美国/丹佛”),我想将该日期转换为格林尼治标准时间;我怎么能这样做? 我还想知道Oracle是否接受DST?它会自动处理吗?是否以相同的方式支持所有时区? 注:“来自时区”在每种情况下都会改变;所以,并不总是美国/丹佛