DateTimeFormatter 获取本地时间而不是使用硬编码时区

问题描述 投票:0回答:1

我有这两行:

DateTimeFormatter dateFormatter = DateTimeFormatter.ofPattern("yyyyMMdd_HHmmss")).withZone(ZoneId.of("UTC"));
String s = dateFormatter.format(Instant.now());

而不是

UTC
我想要获取当地时间。是否可以通用,即不将“UTC”替换为例如“美国/纽约”? 我确实尝试过

DateTimeFormatter dateFormatter = DateTimeFormatter.ofPattern("yyyyMMdd_HHmmss"));
String s = dateFormatter.format(ZonedDateTime.now());

但是得到

ZonedDateTime.now() is not allowed because it silently uses the system default time-zone. You must pass an explicit time-zone (e.g., ZoneId.of("America/Los_Angeles")) 

java datetime java-time
1个回答
0
投票

您可以使用

ZoneId.systemDefault()
动态获取系统默认时区:

DateTimeFormatter dateFormatter = DateTimeFormatter.ofPattern("yyyyMMdd_HHmmss")
        .withZone(ZoneId.systemDefault());
String s = dateFormatter.format(Instant.now());

此方法可确保格式化程序使用正确的本地时区,无论代码在何处运行。

如果您想要一个更简单的解决方案,直接使用本地时区而无需额外配置,您可以创建

DateTimeFormatter
并使用
LocalDateTime.now()
而不是
Instant.now()
:

DateTimeFormatter dateFormatter = DateTimeFormatter.ofPattern("yyyyMMdd_HHmmss");
String s = LocalDateTime.now().format(dateFormatter);
© www.soinside.com 2019 - 2024. All rights reserved.