Вопросы времени - PullRequest
       15

Вопросы времени

2 голосов
/ 30 мая 2011

Я сталкиваюсь с некоторыми проблемами в кроссплатформенной программе: когда я открываю оболочку Python в Linux и в Windows, я не получаю одно и то же время из Epoch.

В Linux я пыталсяdo dpkg-reconfigure tzdata.

В настоящее время в Linux я получаю avec dpkg -configure tzdata:

Current default time zone: 'Europe/London'
Local time is now:      Mon May 30 10:29:52 BST 2011.
Universal Time is now:  Mon May 30 09:29:52 UTC 2011.

Затем в консоли python я создаю этот скрипт:

import time
print time.tzname, time.timezone, time.altzone, time.daylight
print time.localtime()
print time.localtime(0)

В Linux, который возвращает:

('GMT', 'BST') 0 -3600 1
time.struct_time(tm_year=2011, tm_mon=5, tm_mday=30, tm_hour=11, tm_min=35, tm_sec=8, tm_wday=0, tm_yday=150, tm_isdst=1)
time.struct_time(tm_year=1970, tm_mon=1, tm_mday=1, tm_hour=1, tm_min=0, tm_sec=0, tm_wday=3, tm_yday=1, tm_isdst=0)

В Windows, который возвращает:

('GMT', 'GMT (heure d\x92\xe9t\xe9)') 0 -3600 1
time.struct_time(tm_year=2011, tm_mon=5, tm_mday=30, tm_hour=11, tm_min=40, tm_sec=1, tm_wday=0, tm_yday=150, tm_isdst=1)
time.struct_time(tm_year=1970, tm_mon=1, tm_mday=1, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=3, tm_yday=1, tm_isdst=0)

Тогда япопробовал этот скрипт:

myTime = 0
dst = 0
while myTime < time.time():
   l = time.localtime(myTime)
   if l[8] is not dst:
       dst = l[8]
       print dst, l
myTime += 24*60*60

Первые строки, возвращаемые в Linux:

    1 time.struct_time(tm_year=1972, tm_mon=3, tm_mday=27, tm_hour=1, tm_min=0, tm_sec=0, tm_wday=0, tm_yday=80, tm_isdst=1)
    0 time.struct_time(tm_year=1972, tm_mon=10, tm_mday=30, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=0, tm_yday=304, tm_isdst=0)
    1 time.struct_time(tm_year=1973, tm_mon=3, tm_mday=19, tm_hour=1, tm_min=0, tm_sec=0, tm_wday=0, tm_yday=78, tm_isdst=1)
    0 time.struct_time(tm_year=1973, tm_mon=10, tm_mday=29, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=0, tm_yday=302, tm_isdst=0)
    IT CONTINUES UTNIL TODAY..................

Первые строки, возвращаемые в Windows:

    1 time.struct_time(tm_year=1970, tm_mon=3, tm_mday=30, tm_hour=1, tm_min=0, tm_sec=0, tm_wday=0, tm_yday=89, tm_isdst=1)
    0 time.struct_time(tm_year=1970, tm_mon=10, tm_mday=26, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=0, tm_yday=299, tm_isdst=0)
    1 time.struct_time(tm_year=1971, tm_mon=3, tm_mday=29, tm_hour=1, tm_min=0, tm_sec=0, tm_wday=0, tm_yday=88, tm_isdst=1)
    0 time.struct_time(tm_year=1971, tm_mon=11, tm_mday=1, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=0, tm_yday=305, tm_isdst=0)
    1 time.struct_time(tm_year=1972, tm_mon=3, tm_mday=27, tm_hour=1, tm_min=0, tm_sec=0, tm_wday=0, tm_yday=87, tm_isdst=1)
    0 time.struct_time(tm_year=1972, tm_mon=10, tm_mday=30, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=0, tm_yday=304, tm_isdst=0)
    1 time.struct_time(tm_year=1973, tm_mon=3, tm_mday=26, tm_hour=1, tm_min=0, tm_sec=0, tm_wday=0, tm_yday=85, tm_isdst=1)
    0 time.struct_time(tm_year=1973, tm_mon=10, tm_mday=29, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=0, tm_yday=302, tm_isdst=0)
    IT CONTINUES UTNIL TODAY..................

Итак, в Windows мы получаем дату 1970 года, тогда как в Linux она начинается в 1972 году !!

Тогда если янапишите это в моей консоли bash:

zdump -v /usr/share/zoneinfo/Europe/London | grep 197

Я получаю это:

/usr/share/zoneinfo/Europe/London  Sun Oct 31 01:59:59 1971 UTC = Sun Oct 31 02:59:59 1971 BST isdst=0 gmtoff=3600
/usr/share/zoneinfo/Europe/London  Sun Oct 31 02:00:00 1971 UTC = Sun Oct 31 02:00:00 1971 GMT isdst=0 gmtoff=0
/usr/share/zoneinfo/Europe/London  Sun Mar 19 01:59:59 1972 UTC = Sun Mar 19 01:59:59 1972 GMT isdst=0 gmtoff=0
/usr/share/zoneinfo/Europe/London  Sun Mar 19 02:00:00 1972 UTC = Sun Mar 19 03:00:00 1972 BST isdst=1 gmtoff=3600
/usr/share/zoneinfo/Europe/London  Sun Oct 29 01:59:59 1972 UTC = Sun Oct 29 02:59:59 1972 BST isdst=1 gmtoff=3600
/usr/share/zoneinfo/Europe/London  Sun Oct 29 02:00:00 1972 UTC = Sun Oct 29 02:00:00 1972 GMT isdst=0 gmtoff=0
/usr/share/zoneinfo/Europe/London  Sun Mar 18 01:59:59 1973 UTC = Sun Mar 18 01:59:59 1973 GMT isdst=0 gmtoff=0
/usr/share/zoneinfo/Europe/London  Sun Mar 18 02:00:00 1973 UTC = Sun Mar 18 03:00:00 1973 BST isdst=1 gmtoff=3600
/usr/share/zoneinfo/Europe/London  Sun Oct 28 01:59:59 1973 UTC = Sun Oct 28 02:59:59 1973 BST isdst=1 gmtoff=3600
IT CONTINNUES UNTIL 1979 !..........

Как вы можете видеть, мы ничего не видим в 1970 году !!!!

Кто-нибудь знает, как я могу изменить timezoНе из Debian, в мой собственный!?

Спасибо,

Mr_Kaz

Старое сообщение: Здравствуйте, у меня возникли некоторые проблемы вкроссплатформенная программа: когда я открываю оболочку python в Linux и в Windows, я не получаю одно и то же время из Epoch.

В linux (debian squeeze):

>>> import time
>>> time.localtime()
time.struct_time(tm_year=2011, tm_mon=5, tm_mday=30, tm_hour=10, tm_min=1, tm_sec=57, tm_wday=0, tm_yday=150, tm_isdst=1)
>>> time.localtime(0)
time.struct_time(tm_year=1970, tm_mon=1, tm_mday=1, tm_hour=1, tm_min=0, tm_sec=0, tm_wday=3, tm_yday=1, tm_isdst=0)

В Windows (7 64 бит Professionnal):

>>> import time
>>> time.localtime()
time.struct_time(tm_year=2011, tm_mon=5, tm_mday=30, tm_hour=10, tm_min=1, tm_sec=59, tm_wday=0, tm_yday=150, tm_isdst=1)
>>> time.localtime(0)
time.struct_time(tm_year=1970, tm_mon=1, tm_mday=1, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=3, tm_yday=1, tm_isdst=0)

Как видите, разница в часе.Кто-нибудь знает почему?

Спасибо,

Mr_Kaz



Спасибо за ваш ответ, который я сделал тогда: в Windows:

>>> time.tzname
('GMT', 'GMT (heure d\x92\xe9t\xe9)')
>>> time.timezone
0
>>> time.altzone
-3600
>>> time.daylight
1

в Linux:

>>> time.tzname
('UTC', 'UTC')
>>> time.timezone
0
>>> time.altzone
0
>>> time.daylight
0

Я не хочу использовать gmtime, если я не знаю, почему существует проблема.Я попытался изменить время в Linux так, чтобы оно совпадало с Windows (я начал разработку своего программного обеспечения в Windows, и оно отлично работает, поэтому я хочу изменить системное время в Linux, а не в Windows).В Linux я пытался сделать dpkg-reconfigure tzdata.Но что бы я ни выбрал, время все равно неверно.

В настоящее время в Linux я получаю avec dpkg -configure tzdata:

Current default time zone: 'Europe/London'
Local time is now:      Mon May 30 10:29:52 BST 2011.
Universal Time is now:  Mon May 30 09:29:52 UTC 2011.

Я не понимаю, какое время используется в Windows.Я использую 'UTC'.



Я создаю этот скрипт:

import time
print time.tzname, time.timezone, time.altzone, time.daylight
print time.localtime()
print time.localtime(0)

В Linux, который возвращает:

('GMT', 'BST') 0 -3600 1
time.struct_time(tm_year=2011, tm_mon=5, tm_mday=30, tm_hour=11, tm_min=35, tm_sec=8, tm_wday=0, tm_yday=150, tm_isdst=1)
time.struct_time(tm_year=1970, tm_mon=1, tm_mday=1, tm_hour=1, tm_min=0, tm_sec=0, tm_wday=3, tm_yday=1, tm_isdst=0)

В окнах, которыевозвращает:

('GMT', 'GMT (heure d\x92\xe9t\xe9)') 0 -3600 1
time.struct_time(tm_year=2011, tm_mon=5, tm_mday=30, tm_hour=11, tm_min=40, tm_sec=1, tm_wday=0, tm_yday=150, tm_isdst=1)
time.struct_time(tm_year=1970, tm_mon=1, tm_mday=1, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=3, tm_yday=1, tm_isdst=0)

И, как вы можете видеть, со времен эпохи все еще существует проблема времени (это был час ночи) ... 1104 *



Я создаю другую тему, потому что она, похоже, больше не связана с питоном: Проблемы с часовым поясом

Ответы [ 3 ]

2 голосов
/ 30 мая 2011

По-разному ли установлен часовой пояс на одном из ваших компьютеров?

http://docs.python.org/library/time.html#time.gmtime

Приведенная выше ссылка предлагает использовать time.gmtime (), чтобы получить время с эпохи в UTCвместо местного времени.

1 голос
/ 30 мая 2011

Это почти наверняка связано с разной конфигурацией часовых поясов между двумя средами.

Проверьте time.tzname, time.timezone, time.altzone, time.daylight

0 голосов
/ 06 августа 2014

Я понимаю, что это старый вопрос, но я смотрел на некоторые проблемы в той же области и думал, что поделюсь:

С 1968-1972 гг. Великобритания держала BST в течение года

Это означает, что в те годы в Европе и Лондоне изменений DST не было, поэтому ваши результаты по Linux там точные.Нет никаких сомнений в разнице между «GMT» и «Europe / London», поскольку GMT относится ко всем странам в этом часовом поясе, кроме Великобритании.

См., Например: http://wwp.greenwichmeantime.co.uk/daylight-saving-time/history-william-willetts.htm

...