Ati*_*ska 1 java datetime date
我遇到了时区为的日期格式,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;
输入字符串的图表,包含日期、分隔符、时间和相对 UTC 的偏移量。
\n2021-08-03T04:10:07.502-0700\n  ^date^  ^   ^time^   ^offset\n       separator\n将日期与时间和相对于 UTC 的偏移量解析为对象java.time.OffsetDateTime。
OffsetDateTime\n.parse( \n    "2021-08-03T04:10:07.502-0700" , \n    new DateTimeFormatterBuilder()\n    .parseLenient()\n    .append( DateTimeFormatter.ISO_LOCAL_DATE_TIME )\n    .appendPattern( "xx" )\n    .toFormatter()\n)\n.toString()\n\n\n2021-08-03T04:10:07.502-07:00
\n
该字符串采用标准ISO 8601格式。
\n但是,该字符串省略了 UTC 偏移量的小时和分钟之间的可选冒号字符。我建议始终包含冒号,以实现机器的最大兼容性。冒号也使其对人类来说更具可读性。所以用这个:
\n\n\n2021-08-03T04:10:07.502-07:00
\n
前面的 HYPHEN-MINUS 字符表示比UTC 时间本初子午线晚0700七个小时的偏移量。
-\xc2\xa0-07:00表示比 UTC 晚 7 小时,如美洲地区所示。
+07:00指比 UTC 早 7 小时,如泰国、越南、印度尼西亚等亚洲地区。实际上,就常见的商业情况而言,UTC 是新的 GMT。如果您正在进行火箭科学或 GPS/伽利略卫星计算,您应该研究其中的差异。如果您正在为采购订单和发票进行编程,请不要担心。
\n关于你的短语,\xe2\x80\x9c时区GMT\xe2\x80\x9d\xe2\x80\xa6这是一个矛盾。UTC/GMT不是时区。它是定义偏移量的基线:一定数量的小时-分钟-秒。经度是相对于本初子午线,偏移量是相对于 UTC。时区更多。时区是政治家决定的特定地区人民使用的偏移量的过去、现在和未来变化的命名历史。
\n不,日期是在前面的,2021-08-032021 年 8 月 3 日。
将T日期部分与时间部分分开。第三部分是 的偏移量-07:00。
你说:
\n\n\n\n
DateFormat dateFormat = new SimpleDateFormat(dateFormatWithHyphen);\ndateFormat.setTimeZone(TimeZone.getTimeZone("GMT"));
您正在使用可怕的日期时间类,这些类几年前已被java.time中定义的现代java.time类取代。切勿使用、、等。DateCalendarSimpleDateFormat
用于OffsetDateTime表示具有特定时间的日期(与UTC 的偏移量)。
如果您的输入包含可选的冒号,我们可以简单地这样做:
\nString input = "2021-08-03T04:10:07.502-07:00" ;\nOffsetDateTime odt = OffsetDateTime.parse( input ) ;\n如果没有冒号,我们必须指定格式模式。DateTimeFormatter我们可以使用 来构建一个对象DateTimeFormatterBuilder。
DateTimeFormatter f = \n    new DateTimeFormatterBuilder()\n    .parseLenient()\n    .append( DateTimeFormatter.ISO_LOCAL_DATE_TIME )\n    .appendPattern( "xx" )\n    .toFormatter()\n;\n使用该格式化程序。
\nOffsetDateTime odt = OffsetDateTime.parse( input , f ) ;\n\n\nodt.toString(): 2021-08-03T04:10:07.502-07:00
\n
嗯,该代码有效。但理想的解决方案是说服数据发布者使用完整的 ISO 8601 格式,包括每个偏移量中的冒号。
\n| 归档时间: | 
 | 
| 查看次数: | 430 次 | 
| 最近记录: |