我的数据库中存储了HH:mm:ss
格式的时间值(使用MySQL' s time
类型)。此时间应视为IST时区的值。运行我的Java代码的服务器遵循UTC时区。
如何在IST(或UTC millis)中的yyyy-MM-dd HH:mm:ss
中获取格式化的日期时间?以下是我迄今为止尝试过的事情:
// ... Code truncated for brevity
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
LocalTime time = resultSet.getTime("send_time").toLocalTime();
LocalDateTime datetime = time.atDate(LocalDate.now());
System.out.println(datetime.format(formatter));
上面正确地在我的本地机器上打印日期时间,这是在IST上,但我关心它在远程服务器上的行为。
答案 0 :(得分:4)
您的方法很好,无论计算机的时区如何,都应该有效,因为LocalTime
或LocalDateTime
中没有时区信息。一个可能的问题是使用LocalDate.now()
,它将今天的日期返回到计算机的本地时区,而不是IST。您可能希望将其替换为LocalDate.now(ZoneId.of("Asia/Calcutta"))
。
或者@ OleV.V评论。您可以使用新的驱动程序工具直接派生LocalTime
:
LocalTime time = resultSet.getObject("send_time", LocalTime.class);
请注意您的方法可能需要注意的事项:
time
可以存储小于00:00
且大于23:59:59.999999
的值,在这种情况下,您可能会遇到Java方面的意外行为。