Java时间转换

Java时间转换,java,Java,因此,我尝试将存储在UTC中的时间戳转换回基于三个独立时区的适当时间。我有一个良好的开端,但似乎找不到一个简单的答案。我需要转换来填充组合框 简而言之,我有以下几点: ZonedDateTime zdt = 2018-05-18T15:00-04:00[America/New_York] 我所需要的只是一个简单的方法,从这个例子中得到11点或11点。基本上,我需要执行实际的偏移操作。看起来这部分应该很容易,但我想不出来。谢谢。我会这样做的 ZonedDateTime zdt = ZonedDa

因此,我尝试将存储在UTC中的时间戳转换回基于三个独立时区的适当时间。我有一个良好的开端,但似乎找不到一个简单的答案。我需要转换来填充组合框

简而言之,我有以下几点:

ZonedDateTime zdt = 2018-05-18T15:00-04:00[America/New_York]

我所需要的只是一个简单的方法,从这个例子中得到11点或11点。基本上,我需要执行实际的偏移操作。看起来这部分应该很容易,但我想不出来。谢谢。

我会这样做的

ZonedDateTime zdt = ZonedDateTime.parse("2018-05-18T15:00+04:00");
LocalTime time = zdt.withZoneSameInstant(ZoneOffset.UTC).toLocalTime();

虽然
时间
变量值将是19:00,而不是11:00,因为您使用的是UTC-4时区。

因此,我对您的总体问题感到困惑

因此,我尝试将存储在UTC中的时间戳转换回基于三个独立时区的适当时间

那么,您有一个
java.sql.TimeStamp
?那么你应该可以使用像

ZonedDateTime utcDateTime = ZonedDateTime.ofInstant(ts.toInstant(), ZoneId.of("UTC"));
获取基于UTC的值

从那里,您只需将特定时区的
utcDateTime
转换为
LocalDateTime

// This is just for testing, you can use the previous result instead
ZonedDateTime utcDateTime = ZonedDateTime.now(ZoneId.of("UTC"));
LocalDateTime localDateTime = utcDateTime.withZoneSameInstant(ZoneId.systemDefault()).toLocalDateTime();

System.out.println("utcDateTime = " + utcDateTime);
System.out.println("localDateTime = " + localDateTime);
对我来说,是指纹

utcDateTime = 2018-05-18T08:36:46.808Z[UTC]
localDateTime = 2018-05-18T18:36:46.808
然后,您可以对
LocalDateTime
应用所需的格式,例如

System.out.println(localDateTime.format(DateTimeFormatter.ofPattern("HH:mm")));
哪个打印

18:36
现在,很明显,我只是使用我的本地时区,但是这个概念将适用于任何指定的时区

例如,我测试了

LocalDateTime localDateTime = utcDateTime.withZoneSameInstant(ZoneId.of("UTC-4")).toLocalDateTime();
这应该是纽约的时区,它输出

utcDateTime = 2018-05-18T08:43:58.995Z[UTC]
localDateTime = 2018-05-18T04:43:58.995
04:43

在你的例子中,你为什么期望11点?UTC时间不应该是19点吗?我想11点应该是UTC+4点