2013-07-04 158 views
0

我知道有這麼多的帖子與這個問題有關,但他們都沒有能夠澄清我的疑問。Joda時間兩個不同TimeZone之間的UTC值不匹配

我需要從全球常量(UTC)毫秒值中保存用戶的DateTime值,這樣它將有助於轉換到不同的時區,因爲我用兩個不同的時區做了一些測試,以下是我試過的:

隨着時區 - PDT(GMT - 7)

DateTime dateTime = new DateTime(2013, 07, 04, 1, 19, 22); 
String format = "yyyy-MM-dd HH:mm:ss Z"; 

int offsetMinutes = (dateTime.getZone().getOffset(dateTime)/1000)/60; 

log.info(" Current Timezone => "+dateTime.getZone()+", OffSet => "+offsetMinutes); 
log.info(" dateTime => "+dateTime.toString(format)+" => "+dateTime.getMillis()); 

,並與同一日期時間在UTC

DateTime utcDateTime = dateTime.withZone(DateTimeZone.UTC); 
offsetMinutes = (utcDateTime.getZone().getOffset(utcDateTime)/1000)/60; 

log.info(" Current Timezone => "+utcDateTime.getZone()+", OffSet "+offsetMinutes); 
log.info(" dateTime => "+utcDateTime.toString(format)+" => "+utcDateTime.getMillis()); 

下面是結果我得到:

IN PDT(GMT - 7)

Current Timezone => America/Los_Angeles, OffSet => -420 (-7) 
dateTime => 2013-07-04 01:19:22 -0700 => 1372925962000 
Current Timezone => UTC, OffSet 0 
dateTime => 2013-07-04 08:19:22 +0000 => 1372925962000 

在GMT +5:30

Current Timezone => Asia/Kolkata, OffSet => 330 (+5:30) 
dateTime => 2013-07-04 01:19:22 +0530 => 1372880962000 
Current Timezone => UTC, OffSet 0 
dateTime => 2013-07-03 19:49:22 +0000 => 1372880962000 

和問題是,

  1. 使用PDT時區,爲什麼本地毫秒和UTC毫秒相同? (與IST時區相同)

  2. 爲什麼來自Two Different TimeZone的UTC值不同?

如果UTC應該是全局常量,值應該是相同的兩個不同的時區吧?

有人可以澄清我的疑問,我做錯了嗎?

請任何建議或澄清,將是很有益

感謝 拉梅什

+2

對不起,這不清楚;輸出對我來說似乎完全合乎邏輯... – fge

+0

它是完美的,但我只是有一個疑問 –

回答

4

我需要保存的用戶在全球不斷的日期時間值(UTC)的毫秒數

然後您只需撥打getMillis()就可以在DateTime上建立正確的本地日期/時間和時區。根本不需要使用withZone。請注意,由於時區轉換,某些本地日期/時間/區域組合可能不明確或跳過。你應該考慮你想在這些情況下做什麼。

隨着PDT時區,所以當地毫秒UTC毫秒因爲你調用getMillis(),這是自Unix紀元的毫秒數相同

。無論時區如何,它都是即時的全球代表。

爲什麼來自Two Different TimeZone的UTC值不同?

你已經把當地時間相同,但改變了時區 - 這意味着你指的是一個不同的時間瞬間。

+0

是getMillis()是我將保存到分貝。但我感到困惑的是來自兩個不同的時區。你的答案清除了它。謝謝你的時間。 –

+0

您已將本地時間保持不變,但更改了時區 - 這意味着您指的是不同時刻。 可以給我一點澄清一點,就像UTC代表瞬間即時,那麼,2013-07-04 01:19:22 -0700 => ** 2013-07-04 08:19:22 +0000 ** 2013-07-04 01:19:22 +0530 => ** 2013-07-03 19:49:22 + 0000 ** 都是相同的日期時間纔對,爲什麼utc的值不同? –

+0

你說我改變了時區,實際上它沒有,我的意思是我改變了時區爲utc(這是沒有時區),所以我在計算毫秒時指向utc日期,這是我無法理解的 –

0

我需要保存從用戶的全局常量(UTC)的毫秒數的日期時間值,這樣它會在轉換爲不同的時區

是有益的,你怎麼存儲是什麼呢?

由於測試代碼的輸出清楚地表明它只是工作(tm)。 Unix紀元代表從1970年1月1日開始的即時時間(通常以秒爲單位,但是Java輸出以毫秒爲單位)。您可以使用它來轉換到任何時區。

但是,您最好的選擇仍然是存儲用戶輸入的日期和時區。這樣你就可以進行任何你想要的計算。

+0

是的,我將在數據庫中存儲utc long –

相關問題