2016-09-26 203 views
0

我有一個時間戳記如下到我的服務器。如何將時間戳轉換爲不同的時區

Date date = new Date(); 
long timestamp = date.getTime(); 

這是從不同的時區生成的,我只有上面的長整型值。我需要將這個時間轉換爲不同的時區。我試圖按照下面的方式,但它仍然顯示當地時間。

// Convert to localdatetime using local time zone 
LocalDateTime ldt = LocalDateTime.ofInstant(Instant.ofEpochMilli(timestamp), 
      ZoneId.systemDefault()); 

// Convert time to required time zone. 
ZoneId est5EDT = ZoneId.of("EST5EDT"); 
ZonedDateTime est5EDTTime = ldt.atZone(est5EDT); 
System.out.println("EST5EDT : " + est5EDTTime); 

一旦成功轉換了我需要獲得該時間的時間戳的時間。這個怎麼做?

+1

檢查此問題http://stackoverflow.com/questions/6567923/timezone-conversion –

+1

時間戳將相同。時間戳沒有任何時區:2016-09:26T12:00 UTC與巴黎2016-09:26T14:00的時間相同。當您將時間戳顯示爲人類可讀的內容時,時區是相關的。 –

回答

2

您可以在打印時轉換時間戳或時間戳的格式。如果您只想存儲時間戳或比較它們,則無需執行任何操作。

0

這可使用約達時間以及完成,這裏是我的代碼:

import java.text.SimpleDateFormat; 
import org.joda.time.DateTimeZone; 


public class TimeTest{ 

private static final String DATE_FORMAT = "dd MMM yyyy HH:mm:ss"; 

private Date dateToTimeZone(Date tempDate, String timeZoneVal) throws ParseException{ 
      //timeZoneVal -> -8:00, 05:30, ..... 
      String string = timeZoneVal; 
      String[] parts = string.split(":"); 
      String part1 = parts[0]; 
      String part2 = parts[1]; 

      int hoursOffset = Integer.parseInt(part1); 
      int minutesOffset = Integer.parseInt(part2); 

      DateTimeZone timeZone = DateTimeZone.forOffsetHoursMinutes(hoursOffset, minutesOffset); 

      String gmtDate = tempDate.toGMTString(); 

      SimpleDateFormat dateFormat = new SimpleDateFormat(DATE_FORMAT); 
      dateFormat.setTimeZone(timeZone.toTimeZone()); 

      return dateFormat.parse(gmtDate);  

     } 
} 

輸出:

  1. tempDate - >週一10月10日00:00:00
  2. gmtDate - > 2016年10月9日18:30:00
  3. 解析日期時間區域「-08:00」 - > Mon Oct 10 08:00:00
+0

如果OP使用Java 8,那麼他可以使用'java.time',這是jodatime的繼承者(精神上)。 –

相關問題