这个日期"2021-08-03T04:10:07.502-0700"是什么日期格式?



我遇到了一个时区为GMT的日期格式,但我不明白上面日期中微秒后的连字符部分是什么,它的格式是什么?

因此,对于此日期(不带连字符(:"2021-08-03T04:10:07.502",格式为YYYY-MM-dd'T'HH:mm:ss.SS

Q1:对于此日期(带连字符(:"2021-08-03T04:10:07.502-0700",格式为:??

Q2:连字符部分是时区GMT吗?

Q3:如果日期是微秒后的连字符形式,如何添加X位数来寻址

未来Java代码:

String dateFormatWithHyphen = "?"; // replace ? with that format
DateFormat dateFormat = new SimpleDateFormat(dateFormatWithHyphen);
dateFormat.setTimeZone(TimeZone.getTimeZone("GMT"));
return dateFormat;

tl;dr

输入字符串的图表,包含日期、分隔符、一天中的时间和与UTC的偏移量。

2021-08-03T04:10:07.502-0700
^date^  ^   ^time^   ^offset
separator

将您的日期与一天中的时间和UTC的偏移量作为java.time.OffsetDateTime对象进行分析。

OffsetDateTime
.parse( 
"2021-08-03T04:10:07.502-0700" , 
new DateTimeFormatterBuilder()
.parseLenient()
.append( DateTimeFormatter.ISO_LOCAL_DATE_TIME )
.appendPattern( "xx" )
.toFormatter()
)
.toString()

2021-08-03T04:10:07.502-07:00

Q1:对于此日期(带连字符(:";2021-08-03T04:10:07.502-0700";,格式为:

该字符串采用标准ISO 8601格式。

但是,该字符串省略了从UTC偏移的小时和分钟之间的可选COLON字符。我建议始终包括COLON,以最大限度地兼容机器。COLON也使它对人类更具可读性。所以使用这个:

2021-08-03T04:10:07.502-07:00

Q2:连字符部分是GMT时区吗

0700前面的HYPHEN-MINUS特征意味着七小时的偏移量在UTC的时间本初子午线之后

--07:00的意思是在美洲,比UTC晚7小时。

  • +07:00表示比UTC提前7小时,如泰国、越南、印度尼西亚等亚洲国家

UTC实际上是新的GMT,适用于常见的面向业务的情况。如果你正在进行火箭科学或GPS/Gileo卫星计算,你应该研究差异。如果你正在为采购订单和发票编程,不要担心。

关于你的短语,"时区GMT"……这是一个矛盾。UTC/GMT是而不是时区。它是定义偏移量的基准:一定数量的小时-分-秒。经度与本初子午线的距离,偏移量与UTC的距离。时区要多得多。时区是由政治家决定的特定地区人民使用的偏移量的过去、现在和未来变化的命名历史。

Q3:如果日期是微秒后的连字符形式,如何添加X位数来寻址

实际上,.502毫秒,而不是微秒

不,日期是提前的,2021-08-03部分,2021年8月3日。

CCD_ 12将日期部分与时间部分分离。第三部分是CCD_ 13的偏移量。

代码

你说:

DateFormat dateFormat = new SimpleDateFormat(dateFormatWithHyphen);dateFormat.setTimeZone(TimeZone.getTimeZone("GMT"));

您使用的是糟糕的日期-时间类,这些类在几年前被java.time中定义的现代java.time类所取代。永远不要使用DateCalendarSimpleDateFormat等。

使用OffsetDateTime表示日期和一天中的时间,以UTC的特定偏移量显示。

如果您的输入包括可选的COLON,我们可以简单地这样做:

String input = "2021-08-03T04:10:07.502-07:00" ;
OffsetDateTime odt = OffsetDateTime.parse( input ) ;

如果没有COLON,我们必须指定一个格式化模式。我们可以使用DateTimeFormatterBuilder来构建一个DateTimeFormatter对象。

DateTimeFormatter f = 
new DateTimeFormatterBuilder()
.parseLenient()
.append( DateTimeFormatter.ISO_LOCAL_DATE_TIME )
.appendPattern( "xx" )
.toFormatter()
;

使用那个格式化程序。

OffsetDateTime odt = OffsetDateTime.parse( input , f ) ;

odt.toString((:2021-08-03T04:10:07.502-07:00

好吧,这段代码很管用。但理想的解决方案是说服您的数据发布者使用完整的ISO 8601格式,包括每个偏移中的COLON。

最新更新