2012-06-06 59 views
0

將IST轉換爲GMT時,我遇到了一個奇怪的問題。除了下午5點半和6點半以外,轉換工作將全天候正常進行。在此期間,而不是將時間轉換爲12:00:00,它將轉換爲00:00:00在Java中將IST轉換爲GMT時的問題

+3

請向我們展示您使用的代碼。 –

+0

@Pablo 12:00 PM是正午,00:00是午夜。 – Rich

回答

0

好的,所以我猜測IST意味着印度標準時間;即GMT + 5:30。

5:30 pm因此IST將是12點GMT格林威治標準時間12:00:00,使用傳統的24小時制。 (或者他們用來稱呼它的「鐵路時間」。)

沒有任何進一步的輸入,我最好的猜測是你的時間處理代碼有一些錯誤(例如輸入時間不是什麼你認爲它是),或者區域設置有些奇怪的現象會影響時間顯示的方式。

0

我在這個答案中使用24小時保持清楚。

你確定你從17:30 IST轉換?如果你實際上是在05:30(即上午五點三十分)轉換格林尼治標準時間午夜。在24小時內午夜是00:00,所以這些都會加起來。

但是,這並不能解釋從06:30開始的轉換,而這將是格林威治時間01:30。

0

TL;博士

ZonedDateTime.of(2017 , 1 , 23 , 17 , 30 , 0 , 0 , ZoneId.of("Asia/Kolkata")) 
      .toInstant() 

2017-01-23T12:00:00Z

沒有足夠的信息

不可能精確回答這個問題,沒有看到有問題的代碼。但是我可以使用java.time類向您展示正確的現代代碼。

使用java.time

通過「IST」你的意思是印度標準時間,愛爾蘭標準時間,或伊朗標準時間?給出示例數據,我猜。

continent/region的格式指定一個proper time zone name,如America/MontrealAfrica/Casablanca,或Pacific/Auckland。切勿使用3-4字母縮寫,如ESTIST,因爲它們是而不是真正的時區,不是標準化的,甚至不是唯一的(!)。

ZoneId z = ZoneId.of("Asia/Kolkata"); 

LocalDate localDate = LocalDate.of(2017 , 1 , 23); 
LocalTime localTime = LocalTime.of(17 , 30); // 5:30 PM. 

ZonedDateTime zdt = ZonedDateTime.of(localDate , localTime , z); 

要通過UTC的透鏡觀看相同的時刻,提取InstantInstant類表示UTC中時間軸上的一個時刻,分辨率爲nanoseconds(小數點後最多九(9)位數字)。

Instant instant = zdt.toInstant(); 

看到這個code run live at IdeOne.com

在這個日期,印度的時間比UTC早5個半小時。因此,將下午加爾各答下午5點30分調整爲UTC意味着減去5小時30分鐘,這將我們帶回到UTC的中午。所以你在結果中看到。

zdt.toString():2017-01-23T17:30 + 05:30 [亞/加爾各答]

instant.toString():2017-01-23T12:00:00Z


關於java.time

java.time框架是建立在Java 8和更高版本。這些類取代了日期時間類legacy,如java.util.Date,Calendar,& SimpleDateFormat

Joda-Time項目現在位於maintenance mode,建議遷移到java.time類。請參閱Oracle Tutorial。並搜索堆棧溢出了很多例子和解釋。規格是JSR 310

從何處獲取java.time類?

ThreeTen-Extra項目與其他類擴展java.time。這個項目是未來可能增加java.time的一個試驗場。您可以在這裏找到一些有用的類,如Interval,YearWeek,YearQuartermore