这个日期“2021-08-03T04:10:07.502-0700”是什么日期格式?
What date format is this date "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;博士
输入字符串的图表,包含日期、分隔符、time-of-day 和 offset-from-UTC。
2021-08-03T04:10:07.502-0700
^date^ ^ ^time^ ^offset
separator
将 time-of-day 和 offset-from-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 格式。
但是,该字符串省略了 offset-from-UTC 的小时和分钟之间的可选 COLON 字符。我建议始终包含该 COLON 以实现机器的最大兼容性。 COLON 也使它对人类更具可读性。所以使用这个:
2021-08-03T04:10:07.502-07:00
问题 2:连字符部分是 GMT 时区吗?
0700
前面的HYPHEN-MINUS字符表示七小时的偏移量落后UTC时间本初子午线。
- -07:00
表示比 UTC 晚 7 小时,如美洲所见。
+07:00
表示比 UTC 早 7 小时,如泰国、越南、印度尼西亚等亚洲地区所见。
UTC 是新的格林威治标准时间,实际上,就常见的 business-oriented 情况而言。如果您正在进行火箭科学或 GPS/Galileo 卫星计算,您应该研究其中的区别。如果您正在为采购订单和发票编程,请不要担心。
关于您的短语“the timezone GMT”……这是矛盾的。 UTC/GMT 是 不是 和 time zone. It is the baseline against which offsets are defined: a certain number of hours-minutes-seconds. What longitude is to the prime meridian, offsets are to UTC. Time zones are much more. Time zones 是对特定区域的人们使用的偏移量的过去、现在和未来变化的命名历史,由政治家。
Q3:如果微秒后的日期是连字符形式,如何添加X位数来解决?
实际上,.502
是 milliseconds, not microseconds。
不,日期在前面,2021-08-03
部分,2021 年 8 月 3 日。
T
将日期部分与时间部分分开。第三部分是-07:00
.
的偏移量
代码
你说:
DateFormat dateFormat = new SimpleDateFormat(dateFormatWithHyphen);
dateFormat.setTimeZone(TimeZone.getTimeZone("GMT"));
你使用的是糟糕的 date-time 类,几年前被 java.time 类 中定义的现代 java.time类 =85=]java.time。切勿使用 Date
、Calendar
、SimpleDateFormat
等。
使用 OffsetDateTime
表示具有 time-of-day 的日期,如特定 offset-from-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。
我遇到了一个时区为 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;博士
输入字符串的图表,包含日期、分隔符、time-of-day 和 offset-from-UTC。
2021-08-03T04:10:07.502-0700
^date^ ^ ^time^ ^offset
separator
将 time-of-day 和 offset-from-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 格式。
但是,该字符串省略了 offset-from-UTC 的小时和分钟之间的可选 COLON 字符。我建议始终包含该 COLON 以实现机器的最大兼容性。 COLON 也使它对人类更具可读性。所以使用这个:
2021-08-03T04:10:07.502-07:00
问题 2:连字符部分是 GMT 时区吗?
0700
前面的HYPHEN-MINUS字符表示七小时的偏移量落后UTC时间本初子午线。
- -07:00
表示比 UTC 晚 7 小时,如美洲所见。
+07:00
表示比 UTC 早 7 小时,如泰国、越南、印度尼西亚等亚洲地区所见。
UTC 是新的格林威治标准时间,实际上,就常见的 business-oriented 情况而言。如果您正在进行火箭科学或 GPS/Galileo 卫星计算,您应该研究其中的区别。如果您正在为采购订单和发票编程,请不要担心。
关于您的短语“the timezone GMT”……这是矛盾的。 UTC/GMT 是 不是 和 time zone. It is the baseline against which offsets are defined: a certain number of hours-minutes-seconds. What longitude is to the prime meridian, offsets are to UTC. Time zones are much more. Time zones 是对特定区域的人们使用的偏移量的过去、现在和未来变化的命名历史,由政治家。
Q3:如果微秒后的日期是连字符形式,如何添加X位数来解决?
实际上,.502
是 milliseconds, not microseconds。
不,日期在前面,2021-08-03
部分,2021 年 8 月 3 日。
T
将日期部分与时间部分分开。第三部分是-07:00
.
代码
你说:
DateFormat dateFormat = new SimpleDateFormat(dateFormatWithHyphen);
dateFormat.setTimeZone(TimeZone.getTimeZone("GMT"));
你使用的是糟糕的 date-time 类,几年前被 java.time 类 中定义的现代 java.time类 =85=]java.time。切勿使用 Date
、Calendar
、SimpleDateFormat
等。
使用 OffsetDateTime
表示具有 time-of-day 的日期,如特定 offset-from-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。