为什么';T';在OffsetDateTime日期格式中使用-java 8
我使用OffsetDateTime类解析数据库中的日期。 为什么日期包含'T' 示例:为什么';T';在OffsetDateTime日期格式中使用-java 8,datetime,java-8,Datetime,Java 8,我使用OffsetDateTime类解析数据库中的日期。 为什么日期包含'T' 示例:2018-01-01T12:00:00.000Z 我能理解格式是T。。但是,我仍然不明白为什么在两者之间使用't' 提前感谢ISO 8601 2018-01-23T12:00:00.000Z 这意味着UTC 2018年1月23日中午 这是由定义的标准格式之一。这些格式设计用于以文本形式交换日期时间值,便于机器解析,便于人类跨文化阅读。ISO 8601是一个现代标准,取代了各种早期互联网标准中的格式。ISO 86
2018-01-01T12:00:00.000Z
我能理解格式是T。。但是,我仍然不明白为什么在两者之间使用't'
提前感谢ISO 8601
2018-01-23T12:00:00.000Z
这意味着UTC 2018年1月23日中午
这是由定义的标准格式之一。这些格式设计用于以文本形式交换日期时间值,便于机器解析,便于人类跨文化阅读。ISO 8601是一个现代标准,取代了各种早期互联网标准中的格式。ISO 8601还被信息技术以外的各个行业采用
- 中间的<代码> t>代码>将日期部分与日期部分分开。<李>
- 句点(句号)之后是小数秒的任意位数。该标准倾向于使用逗号,但美国人通常使用句号
- 末尾的
发音为“Zulu”,表示与UTC的偏移量为零小时分秒,或Z
+00:00:00
T
,您必须询问标准的作者。我只能猜测字母“t”在英语中被选为time,在法语中被选为temps,等等
使用Z
表示零偏移量是从航空和军事中的常用用法中提取出来的
我强烈建议您在以文本形式存储、写入、交换和记录日期时间值时使用这些ISO 8601格式。这些格式被明智地设计为简单实用。它们避免使用空格字符,并避免广泛使用英语和任何其他语言
java 8及更高版本中内置的java.time类在解析和生成字符串时默认使用这些格式
Instant.now().toString()
2019-08-27T20:15:21.005946Z
java.time.ZonedDateTime
类明智地扩展了标准,将时区名称附加在方括号中
Instant instant = Instant.parse( "2019-08-27T20:15:21.005946Z" ) ;
ZoneId z = ZoneId.of( "Pacific/Auckland" ) ;
ZonedDateTime zdt = instant.atZone( z ) ; // Same moment, same point on the timeline, different wall-clock time.
zdt.toString():2019-08-28T08:15:21.005946+12:00[太平洋/奥克兰]
周
你问:
在我给出的示例中,我是否能够使用“W”而不是“T”
不可以。表示时刻时,必须在日期和时间之间使用T
在ISO 8601的另一种格式中,当表示
2019-W35-3
要使用标准周,请使用扩展java.time功能的项目中的类
LocalDate ld = zdt.toLocalDate() ;
YearWeek yw = YearWeek.from( ld ) ;
ld.toString():2019-08-28
yw.toSting():2019-W35
除了
YearWeek
之外,查看所有这些 谢谢你,琼尔夏普。这些字符只是为了表示吗??。在我的示例中,我能用“W”而不是“T”吗?如果你使用的字符不是T,那么它就不再符合ISO 8601标准了。@JonSharpe但在维基百科中,他们引用了“--”、“:”、“T”、“W”和“Z”作为交换字符,这些字符都有不同的用途<代码>-分隔日期部分,:
分隔时间部分,W
表示“周”,而Z
表示祖鲁/零偏移(UTC)。非常感谢您的解释。这很有帮助
LocalDate ld = zdt.toLocalDate() ;
YearWeek yw = YearWeek.from( ld ) ;
LocalDate ld = zdt.toLocalDate() ; // Extract just the date without the time-of-day and without time zone.