所以我试图将存储在UTC中的TimeStamp转换回基于三个不同时区的适当时间。我有一个良好的开端,但似乎无法找到一种方法来得到一个简单的答案。我需要转换来填充ComboBox。
要把它煮沸,我有这个:
ZonedDateTime zdt = 2018-05-18T15:00-04:00[America/New_York]
我需要的是从这个特定的例子中获得11或11:00的简单方法。基本上我需要执行实际的偏移操作。看起来这部分应该很容易,但我无法弄清楚。感谢。
答案 0 :(得分:1)
我会做这样的事情
[INFO] Internal error in the plugin manager getting plugin
'org.apache.maven.plugins:maven-clean-plugin': Plugin
'org.apache.maven.plugins:maven-clean-plugin:2.5' has an invalid descriptor:
1) Plugin's descriptor contains the wrong group ID: kr.motd.maven
2) Plugin's descriptor contains the wrong artifact ID: os-maven-plugin
3) Plugin's descriptor contains the wrong version: 1.5.0.Final
虽然ZonedDateTime zdt = ZonedDateTime.parse("2018-05-18T15:00+04:00");
LocalTime time = zdt.withZoneSameInstant(ZoneOffset.UTC).toLocalTime();
变量值将是19:00,而不是11:00,因为您使用的是UTC-4时区。
答案 1 :(得分:0)
所以,我对你的整体问题感到困惑
所以我试图将存储在UTC中的TimeStamp转换回基于三个不同时区的适当时间
那么,你有一个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