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