Java (среда обработки) не предоставит мне местное время

Я пытаюсь скорректировать время эпохи для местного часового пояса (например, GMT-7, но оно отображает GMT). Я почти уверен, что это должно сработать, но это не...

Calendar localTime = new GregorianCalendar(TimeZone.getDefault());
Date dd = localTime.getTime();
long t = dd.getTime()/1000; 
System.out.printf("%d\n",t);

Но он по-прежнему выводит время эпохи по Гринвичу, а не по Гринвичу-7 (мой часовой пояс). Поиграв некоторое время, я заставил это работать...

Date ddd = new Date();
long t = ddd.getTime() + TimeZone.getDefault().getOffset( ddd.getTime() );
t = t/1000;

Но почему не работает первый блок?


person reza    schedule 20.09.2011    source источник


Ответы (1)


Объект Date просто переносит время UTC в миллисекундах с начала эпохи. Вот как все время представлено «под капотом» в Java. Это также делает его последовательным для работы. Всякий раз, когда вы хотите что-то распечатать, примените к этому смещение TimeZone и смещение DST.

Вот почему класс SimpleDateFormat принимает TimeZone, но в классе Date нет установщика TimeZone.

Обязательно: я слышал, что Joda Time – гораздо более простой в использовании API даты и времени.

Кроме того, ознакомьтесь с этим сообщением о стандартных библиотеках даты и времени в Java. .

person Bringer128    schedule 20.09.2011