2012-10-09 65 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等)之前。

相關問題