UTC 到本地日期转换

UTC to Local date conversion

您好,我有一个 table,我从中得到一个像“2017-03-24 06:01:33”这样的日期,它是 UTC 格式的。在我的 java 程序中,我必须以字符串形式接收它。如何使用客户端的偏移小时和分钟将其转换为本地日期字符串?

使用这个

simpleDateFormat.setTimeZone("Your-Client's-Timezone");

我会做:

    OffsetDateTime odt = LocalDateTime.parse(dateFromDb, DateTimeFormatter.ofPattern("uuuu-MM-dd HH:mm:ss"))
            .atOffset(ZoneOffset.UTC);
    String localDateString = odt.atZoneSameInstant(ZoneOffset.ofHoursMinutes(5, 30))
            .toLocalDateTime()
            .toString();

我假设您已将客户的时区作为以小时和分钟为单位的偏移量。然后你可以将它们传递给 from ZoneOffset.ofHoursMinutes()。请注意,如果客户端时区在一年中的某些时间使用夏令时(夏令时)(美国大部分地区就是这种情况),您需要确保获得日期所在的一年中时间的偏移量.指定客户端时区的其他方法是 ZoneId.systemDefault()ZoneId.of("Asia/Kolkata")——这样会知道夏令时规则,因此可能更安全。

代码打印:

2017-03-24T11:31:33

您注意到它比预期的输入字符串早了五个半小时。

如果您只需要日期,不需要时间,请使用 toLocalDate() 而不是 toLocalDateTime()

以上都需要Java8。或者Java8日期和时间类到Java6和7的backport,见ThreeTen Backport. If you cannot use Java 8 and do not want to depend on the backport, find your inspiration in .