我有一段时间使用字符串类型,例如: "2015-01-05 17:00"
和 ZoneId
是 "Australia/Sydney"
。
如何使用 Java 8 datetime API 将此时间信息转换为对应的 UTC 时间?
还需要考虑 DST 的东西。
原文由 ttt 发布,翻译遵循 CC BY-SA 4.0 许可协议
现有答案的替代方法是使用适当的时区设置格式化程序:
String input = "2015-01-05 17:00";
ZoneId zone = ZoneId.of("Australia/Sydney");
DateTimeFormatter fmt = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm").withZone(zone);
ZonedDateTime utc = ZonedDateTime.parse(input, fmt).withZoneSameInstant(UTC);
由于您想与数据库交互,您可能需要一个 java.sql.Timestamp
,在这种情况下您不需要显式转换为 UTC 时间,但可以使用 Instant 代替:
ZonedDateTime zdt = ZonedDateTime.parse(input, fmt);
Timestamp sqlTs = Timestamp.from(zdt.toInstant());
原文由 assylias 发布,翻译遵循 CC BY-SA 3.0 许可协议
15 回答8.4k 阅读
8 回答6.2k 阅读
1 回答4k 阅读✓ 已解决
3 回答6k 阅读
3 回答2.2k 阅读✓ 已解决
2 回答3.1k 阅读
2 回答3.8k 阅读
您正在寻找
ZonedDateTime
中的类 - 带有时区的完整日期时间和从 UTC/Greenwich 解析的偏移量。在设计方面,此类应主要视为LocalDateTime
和ZoneId
的组合。ZoneOffset
是一条重要但次要的信息,用于确保该类代表一个瞬间,尤其是在夏令时重叠期间。例如: