gpt4 book ai didi

带时区的 Java 日期 validator

转载 作者:太空宇宙 更新时间:2023-11-04 10:56:53 25 4
gpt4 key购买 nike

当日期中包含 EDT/EST 时,我们是否有任何 API 来验证日期是否有效。我尝试过 Joda、Java SimpleDateFormat 但我无法解析日期。

下面是我得到的示例格式“2017/09/25 16:18:15.099 -0400 EDT”。

感谢任何帮助。

谢谢,斯克

最佳答案

您尝试阅读文档吗?

来自the documentation of 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;

Zone names: This outputs the display name of the time-zone ID. If the count of letters is one, two or three, then the short name is output. …

Offset X and x: This formats the offset based on the number of pattern letters. … Two letters outputs the hour and minute, without a colon, such as '+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));

这会产生 ZonedDateTime2017-09-25T16:18:15.099-04:00[America/New_York]

验证

在上面的代码中,ZonedDateTime 从字符串中获取时区并忽略偏移量。为了验证两者是否一致,我们可以将相同的字符串解析为 ZonedDateTimeOffsetDateTime 并进行比较。后者获取偏移量并忽略时区缩写,因此这将起作用:

    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 也可分别用于澳大利亚东部标准时间和夏令时。三字母时区缩写并不标准化,而且常常含糊不清。如果您可以获得一个带有 region/city 格式的时区 ID 的字符串(例如 America/New_York),或者您只是去掉缩写并仅依赖偏移量,因为这是明确的,那么会更安全。

现代 Java 日期和时间 API

今天,我推荐 java.time(AKA JSR-310),优于 Joda-Time,当然也优于过时的类 SimpleDateFormatDate。对我来说,事实证明它非常好用,而且它肯定不会带来旧类的惊喜。它内置于 Java 8 及更高版本。如果使用 Java 6 或 7,您可能首先会考虑 Joda-Time,但如果您准备好接受外部依赖项,为什么不采用 the ThreeTen Backportjava.time 向后移植到 Java 6 和 7?

关于带时区的 Java 日期 validator ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47272884/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com