2015-12-23 52 views
2

在我的應用程序中,我從一個代表UTC格式時間的文件中讀取一個String值,該文件由.net 2015生成。在我的Java應用程序中,我讀取了該值並需要將其轉換爲然後將其轉換回UTC時間。這是我在Java代碼中的時間轉換爲長期價值:在Java和.net中使用UTC時間?

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。

+0

可能重複的[SimpleDateFormat解析失去時區](http://stackoverflow.com/questions/18122608/simpledateformat-parse-loses-timezone) – childofsoong

+0

我標記了你的重複http://stackoverflow.com/questions/18122608/simpledateformat-parse-loses-timezone - 我意識到當我做了你的代碼之後,我離開了8個小時(離開UTC的小時數)。我認爲你在UTC +/- 2? – childofsoong

+0

「Date」類的主要缺陷之一是,除非從「日曆」實例創建它,否則它本質上不是時區知曉的。這就是爲什麼Java 8有一個新的Date API的原因之一,包括'ZonedDateTime'類。 – Powerlord

回答

2

SimpleDateFormat中的S模式表示毫秒,而不是分數毫秒。因此,8701036被解析爲8701036毫秒,其將總計日期(或時間戳)添加8701秒。這相當於你看到的額外的2小時25分鐘1秒。

SimpleDateFormat不能用毫秒的分數工作。就我所知,你必須自己解析它們。

+0

我該如何解析? –

+0

@ H.Z。以'8701036'並做一些數學運算來解析它所對應的秒數。 –