UTC到本地日期转换

时间:2017-03-27 11:37:10

标签: java mysql utc datetime-conversion

嗨,我有一张桌子,我可以在这张桌子上找到像#34; 2017-03-24 06:01:33"这是UTC。在我的java程序中,我必须以字符串形式接收它。如何使用客户端的偏移小时和分钟将其转换为本地日期字符串?

2 个答案:

答案 0 :(得分:2)

我愿意:

    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();

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

代码打印:

2017-03-24T11:31:33

你注意到它比输入字符串提前了五个半小时。

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

以上所有内容都需要Java 8.或者Java 8日期和时间类的后端到Java 6和7,请参阅ThreeTen Backport。如果您不能使用Java 8并且不想依赖于backport,请在this question: Not able to parse UTC date time to EST local time中找到您的灵感。

答案 1 :(得分:0)

使用此

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