Java 8 将给定的时间和时区转换为 UTC 时间
我有一个时间与字符串类型,如:和是."2015-01-05 17:00"
ZoneId
"Australia/Sydney"
如何使用 Java 8 日期时间 API 将此时间信息转换为与 UTC 时间相对应的时间段?
还需要考虑DST的东西。
我有一个时间与字符串类型,如:和是."2015-01-05 17:00"
ZoneId
"Australia/Sydney"
如何使用 Java 8 日期时间 API 将此时间信息转换为与 UTC 时间相对应的时间段?
还需要考虑DST的东西。
您正在查找 Java8 中的类 - 具有时区的完整日期时间,并与 UTC/格林威治解析偏移量。在设计方面,此类应主要被视为 a 和 a 的组合。是一条重要但次要的信息,用于确保类表示瞬间,尤其是在夏令时重叠期间。ZonedDateTime
LocalDateTime
ZoneId
ZoneOffset
例如:
ZoneId australia = ZoneId.of("Australia/Sydney");
String str = "2015-01-05 17:00";
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm");
LocalDateTime localtDateAndTime = LocalDateTime.parse(str, formatter);
ZonedDateTime dateAndTimeInSydney = ZonedDateTime.of(localtDateAndTime, australia );
System.out.println("Current date and time in a particular timezone : " + dateAndTimeInSydney);
ZonedDateTime utcDate = dateAndTimeInSydney.withZoneSameInstant(ZoneOffset.UTC);
System.out.println("Current date and time in UTC : " + utcDate);
现有答案的替代方法是使用适当的时区设置格式化程序:
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);
由于您希望与数据库进行交互,因此可能需要 一个 ,在这种情况下,您不需要显式转换为 UTC 时间,但可以改用 Instant:java.sql.Timestamp
ZonedDateTime zdt = ZonedDateTime.parse(input, fmt);
Timestamp sqlTs = Timestamp.from(zdt.toInstant());