我有这两行:
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"))
您可以使用
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);