Что все мне нужно сделать в среде поддержки до начала перехода на летнее время? - PullRequest
0 голосов
/ 26 февраля 2009

Моя компания поддерживает следующие приложения для клиентов из США:

IBM Mainframe DB2 Unix , Терадата Oracle SQL Server 2005 Лоусон

Поскольку переход на летнее время начнется к следующему месяцу, я хотел бы узнать ваши общие мысли о том, что все мы должны быть осторожны, чтобы мы могли избежать каких-либо плохих инцидентов?

Спасибо, Visakh

1 Ответ

0 голосов
/ 26 февраля 2009

Летнее время может быть немного сложнее, некоторые мысли:

  • Время перехода на летнее время составляет 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, который работает правильно, но есть много библиотек и продуктов, где это не удается.

...