2013-12-12 5 views
1

У меня есть два long s, представляющие время с эпохи. Оба они имеют одинаковый часовой пояс. Я хочу найти разницу в секундах между этими двумя временами, с учетом экономии дневного света.Разница во времени в отношении экономии дневного света

(def a (java.util.Date. 1259568796000)) ;; Before Day Light Savings 

(def b (java.util.Date. 1255147200000)) ;; After Day Light Savings 

Где а'- 2009-11-30T08:13:16.000-00:00

и

Где б 'является 2009-10-10T04:00:00.000-00:00

Использование JodaTime, я могу сделать Interval из этих двух раз, превратить их в Duration, и получите StandardSeconds.

(.getStandardSeconds (.toDuration (Interval. a b))) 

Это не работает, хотя, потому что документы для Period показывают, что Duration испортит Дневной свет Экономия:

Когда этот период времени добавляется в момент, эффект добавления каждый поле по очереди. В результате это учитывает дневной свет экономия времени. Добавление периода времени от 1 дня до дня до дневного света сбережения начнут добавлять только 23 часа, а не 24, чтобы гарантировать, что время остается неизменным. Если это не то поведение, которое вы хотите, то см. Продолжительность.

Как я могу выполнить эту задачу?

+0

Просто для пояснения, но вы знаете, что конструктор java.util.Date занимает миллисекунды правильно? – samsquanch

+0

@boerealis Я. Я отредактирую сообщение, чтобы отразить даты, которые я использую. Благодаря! – Mike

ответ

3

long в Java представляет собой определенный момент времени (миллисекунды с полуночи 1.1.1970, игнорируя прыжки секунд). Они не имеют часовой пояс и не переключаются с летним временем, он всегда выражается в UTC. Чтобы узнать разницу в секундах между двумя такими моментами времени вы можете использовать

(secondTime - firstTime)/1000 

два раза вы дали экспрессируются в GMT, т.е.

1259568796000 = 2009-11-30T08:13:16.000-00:00 GMT 
1255147200000 = 2009-10-10T04:00:00.000-00:00 GMT 

И GMT не переключается на летнее время либо. Может быть, вы были в замешательстве.

+0

Вычитание дает 4421596 секунд, что неверно. Это на один час. – Mike

+1

@Mike дает время, прошедшее между двумя моментами времени. Обратите внимание, что это не то же самое, что разница между двумя показаниями настенных часов в это время. Существует разница в один час. Я думал, это именно то, о чем вы просили. – Henry

+0

Хм, я думаю, я просто плохо объяснил это. Извините @ Хенри. – Mike

0

Класс java.util.Calendar имеет поддержку для летнего времени. Возможно, запустите свои даты в первую очередь? Он должен сделать нормализацию для вас. Проверьте это other post.

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