在Java和.net中使用UTC时间?

时间:2015-12-23 17:42:57

标签: java datetime utc

在我的应用程序中,我正在从一个文件中读取一个String值,该文件表示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

P.S。我正在使用Java 1.7。

1 个答案:

答案 0 :(得分:2)

S中的SimpleDateFormat模式表示毫秒,而不是小数毫秒。因此,8701036被解析为8701036毫秒,这为总日期(或时间戳)增加了8701秒。这相当于你会看到额外的2小时25分钟和1秒钟。

SimpleDateFormat无法使用几分之一毫秒的时间。据我所知,你必须自己解析它们。