2010-09-22 2 views

ответ

5

Смещение по Гринвичу в часах:

import java.util.TimeZone 

double offset = TimeZone.getTimeZone("America/Los_Angeles") 
    .getRawOffset()/(60*60*1000.0); 
// returns 8.0 

Однако это возвращает необработанный смещение. Смещение изменяется в зависимости от часового пояса и даты из-за экономии дневного света. Для того, чтобы получить смещение для конкретного использования дата:

import java.util.TimeZone 
import java.util.Calendar 

Calendar cal = Calendar.getInstance(); 
double offset = TimeZone.getTimeZone("America/Los_Angeles") 
    .getOffset(cal.getTimeInMillis())/(60*60*1000.0); 
// returns -7.0 for 22/sep/2010 
2

Там огромная разница между этими двумя:

  • «America/Los_Angeles» позволяет определить местное время, отпущенное в любое время UTC
  • «GMT -08: 00» сообщает только разницу между местным временем и UTC по адресу одним мгновением. Он не говорит вам о том, когда и применяется ли DST, или сколько DST применяется

Другими словами, «GMT -08: 00» является смещение, не часовой пояс. Теперь вы можете получить смещение в любой конкретный момент довольно легко - я лично использовал бы Joda Time для этого - и отформатировал его соответствующим образом. Но не считают, что вы действительно получили разумное представление часового пояса.

Смежные вопросы