Разница во времени с учетом экономии дневного света

У меня два longS представляет время с эпохи. У них обоих одинаковый часовой пояс. Я хочу найти разницу в секундах между этими двумя значениями времени при условии экономии дневного света.

(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, чтобы гарантировать, что время остается тем же. Если это не то поведение, которое вы хотите, то смотрите Продолжительность.

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

2 ответа

Решение

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 не переключается на летнее время. Может быть, вы были смущены этим.

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

Другие вопросы по тегам