2012-10-09 67 views
2

我正在尝试获取纽约(美国/东部)和UTC之间的当前偏移量。无论我的服务器在什么时区以及其他任何地方,我怎样才能得到这个值。我只想要以毫秒为单位的偏移量。我确信有一个快速的方法来做到这一点,但我没有找到它。java找到纽约和UTC之间的偏移量

预先感谢您!

+4

美国/东部和UTC之间的偏移量不取决于你的服务器在什么时区,它取决于日期等等。 –

+0

http://www.timeanddate.com/worldclock/city.html?n=179 - 它是-4或-5小时 –

回答

5

注意:这未经测试。

使用:

Calendar class

TimeZone class

//Get NY time zone instance 
TimeZone ny_tz = TimeZone.getTimeZone("America/New_York"); 

//Get NY calendar object with current date/time 
Calendar ny_cal = Calendar.getInstance(ny_tz); 

//Get offset from UTC, accounting for DST 
int ny_offset_ms = ny_cal.get(Calendar.ZONE_OFFSET) + ny_cal.get(Calendar.DST_OFFSET); 
+0

是的,谢谢,我相信这是我所需要的 – Marianna

0

Java API TimeZone

使用的getOffset()获取偏移功能一个时区和GMT的,然后其他与GMT,然后减去他们,你准备好了。但要小心,有人提到这取决于当前日期!这不是微不足道的,因为每一天,几个小时,两个时区是在不同的日期!如果两个时区例如处于不同的DST区域中几个小时(例如DST更改时间),这可能会导致显示不正确

2

我们可以得到它:

FOR EST:

TimeZone est = TimeZone.getTimeZone("America/New_York"); 
    System.out.println("Offset ="+est.getRawOffset()); 

对于PST:

TimeZone pst = TimeZone.getTimeZone("America/Los_Angeles"); 
    System.out.println("Offset ="+pst.getRawOffset()); 
+0

OP询问当前偏移量。这会得到原始偏移量。对于一年中部分时间使用夏令时的地点,这是不正确的。 –

+2

您需要添加est.getRawOffset()+ est.getDSTSavings()以考虑夏令时 – dirkoneill

0

可以使用getRawOffset()函数来得到任意两个时区之间的偏差...... 但你必须明白一两件事,偏移量将UTC与给定的时区之间的差异.. 考虑你的服务器是在加拿大,则偏移必须由加拿大和用户之间的时区的时区差来确定..

int offset = TimeZone.getTimeZone ('Asia/calcutta').getRawOffset() - TimeZone.getDefault().getRawOffset(); 

这里的“TimeZone.getDefault()”是服务器的时区即)加拿大......所以需要扣除它以获得所需的偏移量。

0

我试了@Geoff Montee的回答,但它对我没有帮助。这是结束了工作了:

public static long getOffsetFromUTCInMilliseconds(TimeZone timezone) { 
     long offset = timezone.getOffset(DateTimeHelper.nowUTC().toEpochSecond(ZoneOffset.UTC)) + timezone.getDSTSavings(); 
     return offset; 
    } 

方便的是,答案,如果时区比UTC(GMT-1,GMT-2等)返回了否定的答案,如果时区是返回一个肯定的答复在UTC(GMT + 1,GMT + 2等)之前。

相关问题