【发布时间】:2017-03-10 12:59:40
【问题描述】:
是否有任何 API 可用于不同时区之间的日期时间转换,类似于谷歌地图的时区 API。
不同时区之间的日期时间转换说明 -
给定基准时区、基准时区中的日期时间和目标时区,一个返回目标时区中日期时间的 api。 (其中也考虑了像 dst 这样的概念)
编辑 1 -
根据收到的关于这个问题的负面评论,必须提供更多细节来说明这个问题的需要以及已经用不同方法浪费的努力。
还有这个问题,我希望了解一些在线可用的 api,这些 api 可能一直受到影响,而不是依赖于 java8 提供的 ZonedDateTime 之类的库。
java 8 ZonedDateTime 的一些问题-
见下面的scala代码-
import java.time.{LocalDateTime, ZoneId, ZoneOffset, ZonedDateTime}
import java.time.format.DateTimeFormatter
val istanbul: ZoneId = ZoneId.of("Europe/Istanbul");
val str: String = "2017-03-29 17:00:00";
val str1: String = "2017-03-24 17:00:00";
val formatter: DateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
val localtDateAndTime: LocalDateTime = LocalDateTime.parse(str, formatter);
val localtDateAndTime1: LocalDateTime = LocalDateTime.parse(str1, formatter);
val dateAndTimeInIstanbul: ZonedDateTime = ZonedDateTime.of(localtDateAndTime, istanbul );
val dateAndTimeInIstanbul1: ZonedDateTime = ZonedDateTime.of(localtDateAndTime1, istanbul );
val utcDate: ZonedDateTime = dateAndTimeInIstanbul.withZoneSameInstant(ZoneOffset.UTC);
val utcDate1: ZonedDateTime = dateAndTimeInIstanbul1.withZoneSameInstant(ZoneOffset.UTC);
System.out.println("Original date and time in a particular timezone : " + dateAndTimeInIstanbul);
System.out.println("Converted date and time in UTC : " + utcDate);
System.out.println("Origianl date and time in a particular timezone : " + dateAndTimeInIstanbul1);
System.out.println("Converted date and time in UTC : " + utcDate1);
以上代码生成的输出是-
```
Original date and time in a particular timezone : 2017-03-29T17:00+03:00[Europe/Istanbul]
Converted date and time in UTC : 2017-03-29T14:00Z
Origianl date and time in a particular timezone : 2017-03-24T17:00+02:00[Europe/Istanbul]
Converted date and time in UTC : 2017-03-24T15:00Z
```
现在的问题是,从 2017 年到 2020 年,伊斯坦布尔不会考虑任何 dst,这似乎没有在此 ZonedDateTime 库中考虑。
所以想了解其他一些替代方案。最好是基于 Web 的 API。
【问题讨论】:
-
如果您使用的是 java >= 8,请使用新的日期时间 API:oracle.com/technetwork/articles/java/… 如果您使用的是 java joda.org/joda-time - threeten.org/threetenbp (这个是java 8 date time api的反向移植,所以在新项目中推荐这个,因为我相信joda将不再被使用)
标签: java datetime jodatime datetime-conversion