【发布时间】:2015-12-23 17:42:56
【问题描述】:
在我的应用程序中,我正在从一个文件中读取一个字符串值,该文件表示 UTC 格式的时间,由 .net 2015 生成。在我的 Java 应用程序中,我读取了这个值并需要将其转换为首先是一个 long 值,然后将其转换回 UTC 时间。这是我在 Java 中将时间转换为长值的代码:
DateFormat df = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSSSS'Z'");
df.setTimeZone(TimeZone.getTimeZone("UTC"));
Date date = df.parse(timeString);
long timeLong = date.getTime();
并将其转换回 UTC 格式:
DateFormat df = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSSSS'Z'");
df.setTimeZone(TimeZone.getTimeZone("UTC"));
Date date = new Date(timeLong);
newTimeStamp = df.format(date);
但是,我得到的最终 UTC 时间与我从文件中读取的原始时间不同。它几乎有两个小时的差异。我想知道是不是因为Java和.Net中时间转换的实现方式不同。
我最初的时间是2015-12-22T21:00:11.8701036Z,我做这个转换后得到的最后时间是2015-12-22T23:25:12.000036Z。
附言我使用的是 Java 1.7。
【问题讨论】:
-
我已将您标记为 stackoverflow.com/questions/18122608/… 的副本 - 我发现当我执行您的代码时,我已经离开了 8 小时(我离开 UTC 的小时数)。我想你是在 UTC +/- 2?
-
Date类的主要缺陷之一是它本质上不支持时区,除非您从Calendar实例创建它。这也是 Java 8 有一个新的 Date API 的部分原因,包括ZonedDateTime类。 -
我想你毕竟没有重复 - 我正在写一个答案解释
-
@soong:你有解决办法吗?