1

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

4

2 回答 2

3

我会做:

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

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

于 2017-03-27T12:01:56.237 回答
0

用这个

simpleDateFormat.setTimeZone("Your-Client's-Timezone");
于 2017-03-27T11:39:55.397 回答