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

在Java和.net中使用UTC时间?,java,datetime,utc,Java,Datetime,Utc,在我的应用程序中,我从一个文件中读取一个字符串值,该文件以UTC格式表示时间,由.net 2015生成。在我的Java应用程序中,我读取这个值,需要先将其转换为长值,然后再将其转换回UTC时间。以下是我用Java编写的将时间转换为长值的代码: DateFormat df = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSSSS'Z'"); df.setTimeZone(TimeZone.getTimeZone("UTC")); Date date

在我的应用程序中,我从一个文件中读取一个字符串值,该文件以UTC格式表示时间,由.net 2015生成。在我的Java应用程序中,我读取这个值,需要先将其转换为长值,然后再将其转换回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、 我正在使用Java 1.7。

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


SimpleDateFormat
不能以毫秒为单位工作。据我所知,您必须自己解析它们。

可能的重复我标记了您的重复-我发现在意识到我编写代码时,我离开了8小时(我离开UTC的小时数)。我假设您在UTC+/-2?
日期类的一个主要缺陷是,除非您从
日历
实例创建它,否则它本质上不知道时区。这就是为什么Java8有一个新的日期API的部分原因,包括
ZoneDateTime
课程。我想你毕竟没有一个副本——我正在写答案explaining@soong:你有解决方法吗?我如何解析它?@H.Z.取
8701036
并做一些数学运算来解析它对应的毫秒数。