栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

带有时区的Java日期验证器

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

带有时区的Java日期验证器

您是否尝试阅读文档?

从以下文档中

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



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/440687.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号