当日期中包含EDT / EST时,我们是否有任何API来验证日期是否有效。我已经尝试使用Joda,Java SimpleDateFormat,但我无法解析日期。
下面是我得到的样本格式“2017/09/25 16:18:15.099 -0400 EDT”。
感谢任何帮助。
谢谢, SK
答案 0 :(得分:0)
您是否尝试阅读文档?
来自the documentation of DateTimeFormatter
:
; for i := 0 to (L-1)
xor edi,edi ; index i
input_loop:
cmp edi,[lengthA]
jge input_loop_ends ; if (i >= L), end for
; TODO: Prompt for and input A[i]
; eax = input value, preserve edi (!)
mov [A + 4*edi],eax ; store value into A[i]
; end for
inc edi ; ++i
jmp input_loop
input_loop_ends:
; memory at address A contains L many DWORD values from user
区域名称:输出时区ID的显示名称。如果字母数是一,二或三,那么短名称是 输出。 ...
偏移X和x :根据图案字母的数量格式化偏移。 ...两个字母输出小时和分钟,没有 冒号,例如' + 0130'。 ...
让我们试试看:
z time-zone name zone-name Pacific Standard Time; PST
x zone-offset offset-x +0000; -08; -0830; -08:30; -083015; -08:30:15;
这会产生 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
和ZonedDateTime
并进行比较。后者获取偏移量并忽略时区缩写,因此这将起作用:
OffsetDateTime
避免使用三个字母的时区缩写
EST和EDT也可分别用于澳大利亚东部标准和日光时间。三个字母的时区缩写不是标准化的,通常是模糊的。如果你能得到一个带有 region / city 格式的时区ID的字符串(比如America / New_York),或者你只是简单地剥离了缩写并仅仅依赖于偏移,那么会更安全这是明确的。现代Java日期和时间API
今天我推荐 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());
}
,AKA JSR-310,而不是Joda-Time,当然还有长期过时的课程java.time
和SimpleDateFormat
。事实证明,与我合作是非常好的,而且它肯定不会带来旧课程的惊喜。它内置于Java 8及更高版本。如果使用Java 6或7,您可能最初会考虑使用Joda-Time,但如果您已准备好接受外部依赖,那么为什么不将Date
的{{1}}移回Java 6和7?