Класс TimeZone предоставляет метод getDSTSavings () для конкретного объекта TimeZone.(JavaDoc: «Возвращает количество времени, которое будет добавлено к местному стандартному времени, чтобы получить местное время на настенных часах.»)
Интерфейс Calendar предоставляет два метода getOffset (), которые позволяют узнать смещение от UTC,(JavaDoc: «Возвращает смещение этого часового пояса из UTC на указанную дату. Если летнее время действует на указанную дату, значение смещения корректируется в соответствии с суммой перехода на летнее время.»)
пожалуйста, посмотрите этот фрагмент кода, чтобы разобраться со сложными способами Java-времени:
@Test
public void testDST() {
final TimeZone met = TimeZone.getTimeZone("MET");
Calendar gc = new GregorianCalendar(met);
final long timeInMillis = gc.getTimeInMillis();
final long gmtTime= timeInMillis-(gc.getTimeZone().getOffset(timeInMillis));
final Date gmtDate = new Date(gmtTime);
System.out.printf("%-40s: %tc\n%-40s: %tc\n%-40s: %tc\n%-40s: %d\n%-40s: %d",
"new Date() (local timezone)",new Date(),
"UTC", gmtDate ,
"now from Calendar with TC GMT+02:00",gc,
"zoneoffset",gc.get(Calendar.ZONE_OFFSET),
"dst savings",met.getDSTSavings());
}
Вы также можете определить свой собственный SimpleTimeZone и предоставить собственные правила DST, однако я не нашел, как получить эту информацию отпредопределенные часовые пояса.
Вы также должны знать, что если TimeZone.getTimeZone (TZName) не находит указанный часовой пояс, он не выдает исключение, а просто использует GMT, что может вызвать серьезные недоразумения.
Вы можете найти всю эту информацию (и многое другое) в javadoc для календаря, часового пояса, даты и т. Д.