【发布时间】:2019-11-26 09:58:00
【问题描述】:
我必须在 java 中显示不同国家/地区的本地日期时间。目前我正在为“America/New_York”设置 zoneId,因此只获取服务器上所有地方的 EST 时间。如何动态实现本地日期/时间。
DateTimeFormatter globalFormat = DateTimeFormatter.ofPattern("dd-MMM-yyyy hh:mm a z");
DateTimeFormatter estFormat = DateTimeFormatter.ofPattern("dd-MMM-yyyy hh:mm a 'EST'");
ZoneId istZoneId = ZoneId.of("Asia/Calcutta");
ZoneId estZoneId = ZoneId.of("America/New_York");
Instant instant = Instant.now() ;
ZonedDateTime zdt = ZonedDateTime.now( estZoneId) ;
ZonedDateTime currentISTime = instant.atZone(istZoneId); //India time
ZonedDateTime currentESTime = zdt.withZoneSameInstant(estZoneId); //EST Time
System.out.println("est time.............."+estFormat.format(currentESTime));
【问题讨论】:
-
这段代码是在不同机器上不同区域执行还是后端代码和前端可以定义本地/时区?
-
是的,这段代码在不同区域的不同机器上执行,它是一个后端代码。前端没有定义任何时区。
-
您是否尝试过仅获取 UTC 日期时间并在何时/根据需要进行转换?您也可以直接使用系统默认时区:
ZonedDateTime zdt = ZonedDateTime.now(ZoneId.systemDefault());。 -
你已经在那里了。如果您打印
currentISTime,会发生什么?只是不要在格式化程序中硬编码EST。使用模式字母zzz打印适当的时区缩写。
标签: java zoneddatetime