Летнее время может быть немного сложнее, некоторые мысли:
- Время перехода на летнее время составляет 23 или 25 часов, а не 24, как обычно
- Существует разрыв между 02:00 и 03:00 или эти времена появляются дважды
Вы должны всегда использовать часовые пояса, когда вы получаете данные извне, в противном случае у вас возникнут проблемы. Например. вы не можете знать, изменил ли отправитель настройки летнего времени или нет, потому что вы не можете точно знать, работает ли все правильно на устройстве, и, кроме того, большинство пользователей не меняют часовой пояс (или флаг перехода на летнее время), они само время, и это приведет вас к серьезным неприятностям. Мобильные телефоны иногда сами не меняют настройки дневного света, пользователи меняют просто меняют время с 02:00 до 03:00 и оба CET! Это явно неправильно, так как само время не меняется, это часовой пояс! Это все еще 02:00 по центральноевропейскому времени, но 03:00 по центральноевропейскому времени.
Возможно, вам следует проверить используемые вами продукты / библиотеки, если они корректно работают с изменениями часовых поясов.
Я протестировал нашу среду python (с mx.DateTime), если она правильно знает часовой пояс, который будет использоваться:
программа испытаний:
from mx.DateTime import *
def f(dt):
return dt.Format("%Y-%m-%d %H:%M %Z")
base = ISO.ParseDateTime('2009-03-29 00:00')
for i in range(10):
test = base + i*(30*oneMinute)
diff = test.ticks()-base.ticks()
print "Seconds between %s and %s: %d(%d) diff=%d" % (f(base),
f(test), diff,
i*1800, i*1800-diff)
выход для меня (живу в Германии, 29 марта - летнее время):
$ python test.py
Seconds between 2009-03-29 00:00 CET and 2009-03-29 00:00 CET: 0(0) diff=0
Seconds between 2009-03-29 00:00 CET and 2009-03-29 00:30 CET: 1800(1800) diff=0
Seconds between 2009-03-29 00:00 CET and 2009-03-29 01:00 CET: 3600(3600) diff=0
Seconds between 2009-03-29 00:00 CET and 2009-03-29 01:30 CET: 5400(5400) diff=0
Seconds between 2009-03-29 00:00 CET and 2009-03-29 02:00 CEST: 7200(7200) diff=0
Seconds between 2009-03-29 00:00 CET and 2009-03-29 02:30 CEST: 9000(9000) diff=0
Seconds between 2009-03-29 00:00 CET and 2009-03-29 03:00 CEST: 7200(10800) diff=3600
Seconds between 2009-03-29 00:00 CET and 2009-03-29 03:30 CEST: 9000(12600) diff=3600
Seconds between 2009-03-29 00:00 CET and 2009-03-29 04:00 CEST: 10800(14400) diff=3600
Seconds between 2009-03-29 00:00 CET and 2009-03-29 04:30 CEST: 12600(16200) diff=3600
Как вы можете видеть с mx.DateTime
, который работает правильно, но есть много библиотек и продуктов, где это не удается.