2016-09-26 199 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的继承者(精神上)。 –

相关问题