Java时间转换

时间:2018-05-18 08:29:26

标签: java

所以我试图将存储在UTC中的TimeStamp转换回基于三个不同时区的适当时间。我有一个良好的开端,但似乎无法找到一种方法来得到一个简单的答案。我需要转换来填充ComboBox。

要把它煮沸,我有这个:

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

我需要的是从这个特定的例子中获得11或11:00的简单方法。基本上我需要执行实际的偏移操作。看起来这部分应该很容易,但我无法弄清楚。感谢。

2 个答案:

答案 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