我有一个应用程序,所有后端组件都遵循EST(美国/纽约)的特定流,我们需要捕获并将创建日期和时间从UI传递到后端。是否有任何预定义的标准,其中用户界面应该只传递日期在UTC?用户界面不能太跟随和传递在EST(美国/纽约)相当于它的日期和时间。
用户界面发送创建日期为- "2022-11-04T15:07:18.799Z“,但在EST时区,时间是"11:04.19”AM。
请注意
发布于 2022-11-06 17:40:17
tl;dr
我建议你不要盯着纽约时间。将数据保存在UTC (Instant)中。
Instant.parse ( "2022-11-04T15:07:18.799Z" )仅将时区应用于表示以及特定业务逻辑(ZonedDateTime)所需的位置。
instant.atZone( zoneId )详细信息
应该只在协调世界时传递日期。
使用java.time.Instant类来表示UTC中的某个时刻。也就是说,与协调世界时的零小时-分-秒相抵的时刻。
Instant instant = Instant.now() ; // Always in UTC. 示例文本末尾的Z表示与协调世界时的零小时-分钟-秒的偏移量。来自航空和军事公约,标准化的ISO 8601。
Instant instant = Instant.parse ( "2022-11-04T15:07:18.799Z" ) ;您会发现,如果只使用UTC记录、调试、数据存储、数据交换和大多数业务逻辑,则日期时间处理更容易。
EST(美国/纽约)对应的日期和时间
应用ZoneId来获得ZonedDateTime。
ZoneId z = ZoneId.of( "America/New_York" ) ;
ZonedDateTime zdt = instant.atZone( z ) ; 一般情况下,最好将分区时间仅用于向用户表示,并用于业务逻辑的特定点。
当心:“EST”不是实时时区。America/New_York是。
使用DateTimeFormatter类生成文本。
所有这些都已经在堆栈溢出中被多次覆盖了。寻找更多的知识。
https://stackoverflow.com/questions/74337332
复制相似问题