Вопрос о формате файла базы данных часовых поясов - PullRequest
7 голосов
/ 11 июня 2011

Я читаю из файлов часовых поясов, сгенерированных из базы данных Olson , чтобы узнать, когда часовые пояса меняются и на что они меняются. Формат файлов часовых поясов описан в tzfile.h.

Для моего вопроса я буду использовать данные, полученные для Европы / Рима.

Возможно, он работает правильно, потому что мой вывод правильно соответствует тому, что говорит timeanddate.com . Например, моя программа правильно говорит, что:

28 марта 1982 г. в 02:00:00 часовой пояс меняется на GMT + 2.000000.

26 сентября 1982 года в 03:00:00 часовой пояс изменится на GMT + 1.000000.

Это подтверждается здесь: http://www.timeanddate.com/worldclock/clockchange.html?n=215&year=1982

Однако я не уверен, нужно ли мне использовать tzh_ttisstdcnt и tzh_ttisgmtcnt.

Из tzfile.h:

Тогда есть tzh_ttisstdcnt стандартные / настенные индикаторы, каждый хранится как однобайтовое значение; они говорят, времена перехода, связанные с местными типами времени были указаны как стандартное время или время настенных часов, и используются, когда файл часового пояса используется при обработке часового пояса в стиле POSIX переменные окружения.

Наконец, есть tzh_ttisgmtcnt UTC / местные индикаторы, каждый из которых хранится в виде однобайтовое значение; они говорят, времена перехода, связанные с местными типами времени были указано как UTC или местное время, и используются при использовании файла часового пояса в обработке часового пояса в стиле POSIX переменные окружения.

Я обнаружил, что каждый "тип времени" (структура ttinfo) имеет байты isstd и isgmt. Вот 6 «типов времени» для Европы / Рима:

 Type 0, CEST, DST? = 1, GMT+2, isstd? = 1, isgmt? = 0
 Type 1, CET,  DST? = 0, GMT+1, isstd? = 1, isgmt? = 0
 Type 2, CEST, DST? = 1, GMT+2, isstd? = 0, isgmt? = 0
 Type 3, CET,  DST? = 0, GMT+1, isstd? = 0, isgmt? = 0
 Type 4, CEST, DST? = 1, GMT+2, isstd? = 1, isgmt? = 1
 Type 5, CET,  DST? = 0, GMT+1, isstd? = 1, isgmt? = 1

tzfile.h звучит как isstd, а isgmt говорит вам, как хранится время перехода (gmt против местного времени). Тем не менее, мой код в настоящее время предполагает, что все переходы хранятся в формате GMT. Вывод моей программы соответствует timeanddate.com для всех 6 типов переходов.

Кроме того, я не понимаю, как типы 0 и 1 могут быть стандартными, а не gmt. Я думал, что время по Гринвичу стандартное.

Любое объяснение было бы замечательно.

Edit:

Похоже, что мои выходные данные почти совпадают с данными на timeanddate.com , когда я игнорирую параметры isstd и isgmt. В настоящее время я интерпретирую все времена перехода как GMT:

Типы перехода для Рима:

новый тип 0: isdst = 1 смещение = 7200 аббревиатура = 0 isstd = 1 isgmt = 0

новый тип 1: isdst = 0 смещение = 3600 аббревиатура = 5 isstd = 1 isgmt = 0

новый тип 2: isdst = 1 смещение = 7200 аббревиатура = 0 isstd = 0 isgmt = 0

новый тип 3: isdst = 0 смещение = 3600 аббревиатура = 5 isstd = 0 isgmt = 0

новый тип 4: isdst = 1 смещение = 7200 аббревиатура = 0 isstd = 1 isgmt = 1

Данные для Рима (при условии, что все время перехода даны как GMT):

The starting timezone is GMT+1
type: 0, transition time in file:-1690851600
Add previous offset to get transition as (localtime): June 03, 1916 00:00:00 GMT+2

**type: 1, transition time in file:-1680483600
Add previous offset to get transition as (localtime): October 01, 1916 01:00:00 GMT+1**

type: 0, transition time in file:-1664758800
Add previous offset to get transition as (localtime): April 01, 1917 00:00:00 GMT+2

type: 1, transition time in file:-1649034000
Add previous offset to get transition as (localtime): September 30, 1917 01:00:00 GMT+1

type: 0, transition time in file:-1635123600
Add previous offset to get transition as (localtime): March 10, 1918 00:00:00 GMT+2

type: 1, transition time in file:-1616979600
Add previous offset to get transition as (localtime): October 06, 1918 01:00:00 GMT+1

type: 0, transition time in file:-1604278800
Add previous offset to get transition as (localtime): March 02, 1919 00:00:00 GMT+2

type: 1, transition time in file:-1585530000
Add previous offset to get transition as (localtime): October 05, 1919 01:00:00 GMT+1

type: 0, transition time in file:-1571014800
Add previous offset to get transition as (localtime): March 21, 1920 00:00:00 GMT+2

type: 1, transition time in file:-1555290000
Add previous offset to get transition as (localtime): September 19, 1920 01:00:00 GMT+1

type: 0, transition time in file:-932432400
Add previous offset to get transition as (localtime): June 15, 1940 00:00:00 GMT+2

type: 1, transition time in file:-857257200
Add previous offset to get transition as (localtime): November 02, 1942 03:00:00 GMT+1

type: 0, transition time in file:-844556400
Add previous offset to get transition as (localtime): March 29, 1943 02:00:00 GMT+2

type: 1, transition time in file:-828226800
Add previous offset to get transition as (localtime): October 04, 1943 03:00:00 GMT+1

type: 0, transition time in file:-812502000
Add previous offset to get transition as (localtime): April 03, 1944 02:00:00 GMT+2

type: 1, transition time in file:-798080400
Add previous offset to get transition as (localtime): September 17, 1944 01:00:00 GMT+1

type: 2, transition time in file:-781052400
Add previous offset to get transition as (localtime): April 02, 1945 02:00:00 GMT+2

type: 1, transition time in file:-766717200
Add previous offset to get transition as (localtime): September 15, 1945 01:00:00 GMT+1

type: 0, transition time in file:-750898800
Add previous offset to get transition as (localtime): March 17, 1946 02:00:00 GMT+2

type: 1, transition time in file:-733359600
Add previous offset to get transition as (localtime): October 06, 1946 03:00:00 GMT+1

type: 0, transition time in file:-719456400
Add previous offset to get transition as (localtime): March 16, 1947 00:00:00 GMT+2

type: 1, transition time in file:-701917200
Add previous offset to get transition as (localtime): October 05, 1947 01:00:00 GMT+1

type: 0, transition time in file:-689209200
Add previous offset to get transition as (localtime): February 29, 1948 02:00:00 GMT+2

type: 1, transition time in file:-670460400
Add previous offset to get transition as (localtime): October 03, 1948 03:00:00 GMT+1

type: 2, transition time in file:-114051600
Add previous offset to get transition as (localtime): May 22, 1966 00:00:00 GMT+2

type: 3, transition time in file:-103168800
Add previous offset to get transition as (localtime): September 25, 1966 00:00:00 GMT+1

type: 2, transition time in file:-81997200
Add previous offset to get transition as (localtime): May 28, 1967 00:00:00 GMT+2

type: 3, transition time in file:-71719200
Add previous offset to get transition as (localtime): September 24, 1967 00:00:00 GMT+1

type: 2, transition time in file:-50547600
Add previous offset to get transition as (localtime): May 26, 1968 00:00:00 GMT+2

type: 3, transition time in file:-40269600
Add previous offset to get transition as (localtime): September 22, 1968 00:00:00 GMT+1

type: 2, transition time in file:-18493200
Add previous offset to get transition as (localtime): June 01, 1969 00:00:00 GMT+2

type: 3, transition time in file:-8215200
Add previous offset to get transition as (localtime): September 28, 1969 00:00:00 GMT+1

type: 2, transition time in file:12956400
Add previous offset to get transition as (localtime): May 31, 1970 00:00:00 GMT+2

type: 3, transition time in file:23234400
Add previous offset to get transition as (localtime): September 27, 1970 00:00:00 GMT+1

type: 2, transition time in file:43801200
Add previous offset to get transition as (localtime): May 23, 1971 00:00:00 GMT+2

type: 3, transition time in file:54687600
Add previous offset to get transition as (localtime): September 26, 1971 01:00:00 GMT+1

type: 2, transition time in file:75855600
Add previous offset to get transition as (localtime): May 28, 1972 00:00:00 GMT+2

type: 3, transition time in file:86738400
Add previous offset to get transition as (localtime): October 01, 1972 00:00:00 GMT+1

type: 2, transition time in file:107910000
Add previous offset to get transition as (localtime): June 03, 1973 00:00:00 GMT+2

type: 3, transition time in file:118188000
Add previous offset to get transition as (localtime): September 30, 1973 00:00:00 GMT+1

type: 2, transition time in file:138754800
Add previous offset to get transition as (localtime): May 26, 1974 00:00:00 GMT+2

type: 3, transition time in file:149637600
Add previous offset to get transition as (localtime): September 29, 1974 00:00:00 GMT+1

type: 0, transition time in file:170809200
Add previous offset to get transition as (localtime): June 01, 1975 00:00:00 GMT+2

type: 1, transition time in file:181090800
Add previous offset to get transition as (localtime): September 28, 1975 01:00:00 GMT+1

type: 0, transition time in file:202258800
Add previous offset to get transition as (localtime): May 30, 1976 00:00:00 GMT+2

type: 1, transition time in file:212540400
Add previous offset to get transition as (localtime): September 26, 1976 01:00:00 GMT+1

type: 0, transition time in file:233103600
Add previous offset to get transition as (localtime): May 22, 1977 00:00:00 GMT+2

type: 1, transition time in file:243990000
Add previous offset to get transition as (localtime): September 25, 1977 01:00:00 GMT+1

type: 0, transition time in file:265158000
Add previous offset to get transition as (localtime): May 28, 1978 00:00:00 GMT+2

type: 1, transition time in file:276044400
Add previous offset to get transition as (localtime): October 01, 1978 01:00:00 GMT+1

type: 0, transition time in file:296607600
Add previous offset to get transition as (localtime): May 27, 1979 00:00:00 GMT+2

type: 1, transition time in file:307494000
Add previous offset to get transition as (localtime): September 30, 1979 01:00:00 GMT+1

type: 4, transition time in file:323830800
Add previous offset to get transition as (localtime): April 06, 1980 02:00:00 GMT+2

type: 5, transition time in file:338950800
Add previous offset to get transition as (localtime): September 28, 1980 03:00:00 GMT+1

type: 4, transition time in file:354675600
Add previous offset to get transition as (localtime): March 29, 1981 02:00:00 GMT+2

type: 5, transition time in file:370400400
Add previous offset to get transition as (localtime): September 27, 1981 03:00:00 GMT+1

type: 4, transition time in file:386125200
Add previous offset to get transition as (localtime): March 28, 1982 02:00:00 GMT+2

type: 5, transition time in file:401850000
Add previous offset to get transition as (localtime): September 26, 1982 03:00:00 GMT+1

type: 4, transition time in file:417574800
Add previous offset to get transition as (localtime): March 27, 1983 02:00:00 GMT+2

type: 5, transition time in file:433299600
Add previous offset to get transition as (localtime): September 25, 1983 03:00:00 GMT+1

type: 4, transition time in file:449024400
Add previous offset to get transition as (localtime): March 25, 1984 02:00:00 GMT+2

type: 5, transition time in file:465354000
Add previous offset to get transition as (localtime): September 30, 1984 03:00:00 GMT+1

type: 4, transition time in file:481078800
Add previous offset to get transition as (localtime): March 31, 1985 02:00:00 GMT+2

type: 5, transition time in file:496803600
Add previous offset to get transition as (localtime): September 29, 1985 03:00:00 GMT+1

type: 4, transition time in file:512528400
Add previous offset to get transition as (localtime): March 30, 1986 02:00:00 GMT+2

type: 5, transition time in file:528253200
Add previous offset to get transition as (localtime): September 28, 1986 03:00:00 GMT+1

type: 4, transition time in file:543978000
Add previous offset to get transition as (localtime): March 29, 1987 02:00:00 GMT+2

type: 5, transition time in file:559702800
Add previous offset to get transition as (localtime): September 27, 1987 03:00:00 GMT+1

type: 4, transition time in file:575427600
Add previous offset to get transition as (localtime): March 27, 1988 02:00:00 GMT+2

type: 5, transition time in file:591152400
Add previous offset to get transition as (localtime): September 25, 1988 03:00:00 GMT+1

type: 4, transition time in file:606877200
Add previous offset to get transition as (localtime): March 26, 1989 02:00:00 GMT+2

type: 5, transition time in file:622602000
Add previous offset to get transition as (localtime): September 24, 1989 03:00:00 GMT+1

type: 4, transition time in file:638326800
Add previous offset to get transition as (localtime): March 25, 1990 02:00:00 GMT+2

type: 5, transition time in file:654656400
Add previous offset to get transition as (localtime): September 30, 1990 03:00:00 GMT+1

type: 4, transition time in file:670381200
Add previous offset to get transition as (localtime): March 31, 1991 02:00:00 GMT+2

type: 5, transition time in file:686106000
Add previous offset to get transition as (localtime): September 29, 1991 03:00:00 GMT+1

type: 4, transition time in file:701830800
Add previous offset to get transition as (localtime): March 29, 1992 02:00:00 GMT+2

type: 5, transition time in file:717555600
Add previous offset to get transition as (localtime): September 27, 1992 03:00:00 GMT+1

type: 4, transition time in file:733280400
Add previous offset to get transition as (localtime): March 28, 1993 02:00:00 GMT+2

type: 5, transition time in file:749005200
Add previous offset to get transition as (localtime): September 26, 1993 03:00:00 GMT+1

type: 4, transition time in file:764730000
Add previous offset to get transition as (localtime): March 27, 1994 02:00:00 GMT+2

type: 5, transition time in file:780454800
Add previous offset to get transition as (localtime): September 25, 1994 03:00:00 GMT+1

type: 4, transition time in file:796179600
Add previous offset to get transition as (localtime): March 26, 1995 02:00:00 GMT+2

type: 5, transition time in file:811904400
Add previous offset to get transition as (localtime): September 24, 1995 03:00:00 GMT+1

type: 4, transition time in file:828234000
Add previous offset to get transition as (localtime): March 31, 1996 02:00:00 GMT+2

type: 5, transition time in file:846378000
Add previous offset to get transition as (localtime): October 27, 1996 03:00:00 GMT+1

type: 4, transition time in file:859683600
Add previous offset to get transition as (localtime): March 30, 1997 02:00:00 GMT+2

type: 5, transition time in file:877827600
Add previous offset to get transition as (localtime): October 26, 1997 03:00:00 GMT+1

type: 4, transition time in file:891133200
Add previous offset to get transition as (localtime): March 29, 1998 02:00:00 GMT+2

type: 5, transition time in file:909277200
Add previous offset to get transition as (localtime): October 25, 1998 03:00:00 GMT+1

type: 4, transition time in file:922582800
Add previous offset to get transition as (localtime): March 28, 1999 02:00:00 GMT+2

type: 5, transition time in file:941331600
Add previous offset to get transition as (localtime): October 31, 1999 03:00:00 GMT+1

type: 4, transition time in file:954032400
Add previous offset to get transition as (localtime): March 26, 2000 02:00:00 GMT+2

type: 5, transition time in file:972781200
Add previous offset to get transition as (localtime): October 29, 2000 03:00:00 GMT+1

type: 4, transition time in file:985482000
Add previous offset to get transition as (localtime): March 25, 2001 02:00:00 GMT+2

type: 5, transition time in file:1004230800
Add previous offset to get transition as (localtime): October 28, 2001 03:00:00 GMT+1

type: 4, transition time in file:1017536400
Add previous offset to get transition as (localtime): March 31, 2002 02:00:00 GMT+2

type: 5, transition time in file:1035680400
Add previous offset to get transition as (localtime): October 27, 2002 03:00:00 GMT+1

type: 4, transition time in file:1048986000
Add previous offset to get transition as (localtime): March 30, 2003 02:00:00 GMT+2

type: 5, transition time in file:1067130000
Add previous offset to get transition as (localtime): October 26, 2003 03:00:00 GMT+1

type: 4, transition time in file:1080435600
Add previous offset to get transition as (localtime): March 28, 2004 02:00:00 GMT+2

type: 5, transition time in file:1099184400
Add previous offset to get transition as (localtime): October 31, 2004 03:00:00 GMT+1

type: 4, transition time in file:1111885200
Add previous offset to get transition as (localtime): March 27, 2005 02:00:00 GMT+2

type: 5, transition time in file:1130634000
Add previous offset to get transition as (localtime): October 30, 2005 03:00:00 GMT+1

type: 4, transition time in file:1143334800
Add previous offset to get transition as (localtime): March 26, 2006 02:00:00 GMT+2

type: 5, transition time in file:1162083600
Add previous offset to get transition as (localtime): October 29, 2006 03:00:00 GMT+1

type: 4, transition time in file:1174784400
Add previous offset to get transition as (localtime): March 25, 2007 02:00:00 GMT+2

type: 5, transition time in file:1193533200
Add previous offset to get transition as (localtime): October 28, 2007 03:00:00 GMT+1

type: 4, transition time in file:1206838800
Add previous offset to get transition as (localtime): March 30, 2008 02:00:00 GMT+2

type: 5, transition time in file:1224982800
Add previous offset to get transition as (localtime): October 26, 2008 03:00:00 GMT+1

type: 4, transition time in file:1238288400
Add previous offset to get transition as (localtime): March 29, 2009 02:00:00 GMT+2

type: 5, transition time in file:1256432400
Add previous offset to get transition as (localtime): October 25, 2009 03:00:00 GMT+1

type: 4, transition time in file:1269738000
Add previous offset to get transition as (localtime): March 28, 2010 02:00:00 GMT+2

type: 5, transition time in file:1288486800
Add previous offset to get transition as (localtime): October 31, 2010 03:00:00 GMT+1

type: 4, transition time in file:1301187600
Add previous offset to get transition as (localtime): March 27, 2011 02:00:00 GMT+2

type: 5, transition time in file:1319936400
Add previous offset to get transition as (localtime): October 30, 2011 03:00:00 GMT+1

type: 4, transition time in file:1332637200
Add previous offset to get transition as (localtime): March 25, 2012 02:00:00 GMT+2

type: 5, transition time in file:1351386000
Add previous offset to get transition as (localtime): October 28, 2012 03:00:00 GMT+1

type: 4, transition time in file:1364691600
Add previous offset to get transition as (localtime): March 31, 2013 02:00:00 GMT+2

type: 5, transition time in file:1382835600
Add previous offset to get transition as (localtime): October 27, 2013 03:00:00 GMT+1

type: 4, transition time in file:1396141200
Add previous offset to get transition as (localtime): March 30, 2014 02:00:00 GMT+2

type: 5, transition time in file:1414285200
Add previous offset to get transition as (localtime): October 26, 2014 03:00:00 GMT+1

type: 4, transition time in file:1427590800
Add previous offset to get transition as (localtime): March 29, 2015 02:00:00 GMT+2

type: 5, transition time in file:1445734800
Add previous offset to get transition as (localtime): October 25, 2015 03:00:00 GMT+1

type: 4, transition time in file:1459040400
Add previous offset to get transition as (localtime): March 27, 2016 02:00:00 GMT+2

type: 5, transition time in file:1477789200
Add previous offset to get transition as (localtime): October 30, 2016 03:00:00 GMT+1

type: 4, transition time in file:1490490000
Add previous offset to get transition as (localtime): March 26, 2017 02:00:00 GMT+2

type: 5, transition time in file:1509238800
Add previous offset to get transition as (localtime): October 29, 2017 03:00:00 GMT+1

type: 4, transition time in file:1521939600
Add previous offset to get transition as (localtime): March 25, 2018 02:00:00 GMT+2

type: 5, transition time in file:1540688400
Add previous offset to get transition as (localtime): October 28, 2018 03:00:00 GMT+1

type: 4, transition time in file:1553994000
Add previous offset to get transition as (localtime): March 31, 2019 02:00:00 GMT+2

type: 5, transition time in file:1572138000
Add previous offset to get transition as (localtime): October 27, 2019 03:00:00 GMT+1

type: 4, transition time in file:1585443600
Add previous offset to get transition as (localtime): March 29, 2020 02:00:00 GMT+2

type: 5, transition time in file:1603587600
Add previous offset to get transition as (localtime): October 25, 2020 03:00:00 GMT+1

type: 4, transition time in file:1616893200
Add previous offset to get transition as (localtime): March 28, 2021 02:00:00 GMT+2

type: 5, transition time in file:1635642000
Add previous offset to get transition as (localtime): October 31, 2021 03:00:00 GMT+1

type: 4, transition time in file:1648342800
Add previous offset to get transition as (localtime): March 27, 2022 02:00:00 GMT+2

type: 5, transition time in file:1667091600
Add previous offset to get transition as (localtime): October 30, 2022 03:00:00 GMT+1

type: 4, transition time in file:1679792400
Add previous offset to get transition as (localtime): March 26, 2023 02:00:00 GMT+2

type: 5, transition time in file:1698541200
Add previous offset to get transition as (localtime): October 29, 2023 03:00:00 GMT+1

type: 4, transition time in file:1711846800
Add previous offset to get transition as (localtime): March 31, 2024 02:00:00 GMT+2

type: 5, transition time in file:1729990800
Add previous offset to get transition as (localtime): October 27, 2024 03:00:00 GMT+1

type: 4, transition time in file:1743296400
Add previous offset to get transition as (localtime): March 30, 2025 02:00:00 GMT+2

type: 5, transition time in file:1761440400
Add previous offset to get transition as (localtime): October 26, 2025 03:00:00 GMT+1

type: 4, transition time in file:1774746000
Add previous offset to get transition as (localtime): March 29, 2026 02:00:00 GMT+2

type: 5, transition time in file:1792890000
Add previous offset to get transition as (localtime): October 25, 2026 03:00:00 GMT+1

type: 4, transition time in file:1806195600
Add previous offset to get transition as (localtime): March 28, 2027 02:00:00 GMT+2

type: 5, transition time in file:1824944400
Add previous offset to get transition as (localtime): October 31, 2027 03:00:00 GMT+1

type: 4, transition time in file:1837645200
Add previous offset to get transition as (localtime): March 26, 2028 02:00:00 GMT+2

type: 5, transition time in file:1856394000
Add previous offset to get transition as (localtime): October 29, 2028 03:00:00 GMT+1

type: 4, transition time in file:1869094800
Add previous offset to get transition as (localtime): March 25, 2029 02:00:00 GMT+2

type: 5, transition time in file:1887843600
Add previous offset to get transition as (localtime): October 28, 2029 03:00:00 GMT+1

type: 4, transition time in file:1901149200
Add previous offset to get transition as (localtime): March 31, 2030 02:00:00 GMT+2

type: 5, transition time in file:1919293200
Add previous offset to get transition as (localtime): October 27, 2030 03:00:00 GMT+1

type: 4, transition time in file:1932598800
Add previous offset to get transition as (localtime): March 30, 2031 02:00:00 GMT+2

type: 5, transition time in file:1950742800
Add previous offset to get transition as (localtime): October 26, 2031 03:00:00 GMT+1

type: 4, transition time in file:1964048400
Add previous offset to get transition as (localtime): March 28, 2032 02:00:00 GMT+2

type: 5, transition time in file:1982797200
Add previous offset to get transition as (localtime): October 31, 2032 03:00:00 GMT+1

type: 4, transition time in file:1995498000
Add previous offset to get transition as (localtime): March 27, 2033 02:00:00 GMT+2

type: 5, transition time in file:2014246800
Add previous offset to get transition as (localtime): October 30, 2033 03:00:00 GMT+1

type: 4, transition time in file:2026947600
Add previous offset to get transition as (localtime): March 26, 2034 02:00:00 GMT+2

type: 5, transition time in file:2045696400
Add previous offset to get transition as (localtime): October 29, 2034 03:00:00 GMT+1

type: 4, transition time in file:2058397200
Add previous offset to get transition as (localtime): March 25, 2035 02:00:00 GMT+2

type: 5, transition time in file:2077146000
Add previous offset to get transition as (localtime): October 28, 2035 03:00:00 GMT+1

type: 4, transition time in file:2090451600
Add previous offset to get transition as (localtime): March 30, 2036 02:00:00 GMT+2

type: 5, transition time in file:2108595600
Add previous offset to get transition as (localtime): October 26, 2036 03:00:00 GMT+1

type: 4, transition time in file:2121901200
Add previous offset to get transition as (localtime): March 29, 2037 02:00:00 GMT+2

type: 5, transition time in file:2140045200
Add previous offset to get transition as (localtime): October 25, 2037 03:00:00 GMT+1

Мой 2-й и 4-й переход на час позже, чем перечисленные здесь , но почти все остальное выглядит так, как будто оно совпадает.

Ответы [ 2 ]

3 голосов
/ 12 июня 2011

«Стандартное время» означает «зимнее время», а не «летнее время» или «летнее время».Да, GMT (в общем, строго UTC) - это «стандарт времени», но он не совсем совпадает с тем, на что ссылается столбец «isstd» в ваших данных.

Суть в том, чтоЗначение isstd, равное 0 или 1, означает, что время перехода в Европе (обычно) указано в 02:00 в текущем часовом поясе.

Таким образом, часы для Европы / Рима составили:

1982-03-28 01:59:59 (UTC+01:00)
1982-03-28 03:00:00 (UTC+02:00)

Этот переход был задокументирован, чтобы происходить в 02:00 по стандартному времени (поэтому isstd = 1), но это было не время UTC (GMT);следовательно, это был переход типа 0 в вашем списке.И наоборот, осенью часы пошли:

1982-09-26 01:59:59 (UTC+02:00)
1982-09-26 01:00:00 (UTC+01:00)

Было задокументировано, что переход произошел в 02:00 в часовом поясе, преобладающем до переключения, поэтому isstd = 0 (но это был не UTC (Время по Гринвичу);следовательно, это был переход типа 3 в вашем списке.

Другие комбинации (типы 1, 2, 4, 5) появляются в других обстоятельствах.Для тех же двух переходов вы должны использовать запись типа 4 и задокументировать время изменения как 01:00 UTC (поскольку 01: 00: 00 + 00: 00 совпадает с 02: 00: 00 + 01: 00; иВы должны использовать запись типа 5 и задокументировать время изменения как 00:00 UTC (потому что 00: 00: 00 + 00: 00 совпадает с 02: 00: 00 + 02: 00). Обратите внимание, что время переключения здесьотличаются друг от друга. Аналогичные различия в описании относятся к типам 1 и 2.

0 голосов
/ 12 июня 2011

Я собирался редактировать свой оригинальный пост, но он говорит, что он слишком длинный:

Обновление:

Я думаю, что мои данные верны,и TimeAndDate.com имеет небольшую ошибку.

Для моих тестов я сосредоточился на первых 2 переходах для Рима.

Мои данные были:

тип: 0, время перехода в файле: -1690851600

Добавить предыдущее смещение, чтобы получить локальное время перехода: 03 июня 1916 г. 00:00:00 Новый часовой пояс GMT + 2

тип: 1, время перехода в файле: -1680483600

Добавить предыдущее смещение, чтобы получить локальное время перехода: 01 октября, 1916 01:00:00 Новый часовой пояс GMT + 1

TimeAndDate данные показывают:

1.) Суббота, 3 июня, 1916 11:59:59 PM

Воскресенье, 4 июня 1916 г. 12:00:00 Полночь → 1:00:00 AM + 1h UTC + 2h CEST DST начинается

2.)Суббота, 30 сентября 1916 г. 23:59:59

12: 00: 00 Полночь → 11:00:00 Без UTC + 1 час CET DST заканчивается

Я установил свойчасовой пояс компьютера и местное время, чтобы соответствовать Риму.Затем я запустил следующий код:

time_t rome_ts;
struct tm * rome_info;
char rome_buffer[75];

printf("My first transition:\n");

rome_ts = -1690851601;
rome_info = localtime(&rome_ts);
printf("Timestamp: %ld\n",rome_ts);
strftime(rome_buffer,75,"%A %B %d, %Y %H:%M:%S %Z",rome_info);
printf("%s, dst? = %d\n",rome_buffer,rome_info->tm_isdst);
printf("\n");

rome_ts = -1690851600;
rome_info = localtime(&rome_ts);
printf("Timestamp: %ld\n",rome_ts);
strftime(rome_buffer,75,"%A %B %d, %Y %H:%M:%S %Z",rome_info);
printf("%s, dst? = %d\n",rome_buffer,rome_info->tm_isdst);
printf("\n");

rome_ts = -1690851599;
rome_info = localtime(&rome_ts);
printf("Timestamp: %ld\n",rome_ts);
strftime(rome_buffer,75,"%A %B %d, %Y %H:%M:%S %Z",rome_info);
printf("%s, dst? = %d\n",rome_buffer,rome_info->tm_isdst);
printf("\n\n\n");


printf("TimeandDate.com's first transition:\n");

rome_ts = -1690768801;
rome_info = localtime(&rome_ts);
printf("Timestamp: %ld\n",rome_ts);
strftime(rome_buffer,75,"%A %B %d, %Y %H:%M:%S %Z",rome_info);
printf("%s, dst? = %d\n",rome_buffer,rome_info->tm_isdst);
printf("\n");

rome_ts = -1690768800;
rome_info = localtime(&rome_ts);
printf("Timestamp: %ld\n",rome_ts);
strftime(rome_buffer,75,"%A %B %d, %Y %H:%M:%S %Z",rome_info);
printf("%s, dst? = %d\n",rome_buffer,rome_info->tm_isdst);
printf("\n");

rome_ts = -1690768799;
rome_info = localtime(&rome_ts);
printf("Timestamp: %ld\n",rome_ts);
strftime(rome_buffer,75,"%A %B %d, %Y %H:%M:%S %Z",rome_info);
printf("%s, dst? = %d\n",rome_buffer,rome_info->tm_isdst);
printf("\n\n\n");


printf("My second transition:\n");

rome_ts = -1680483601;
rome_info = localtime(&rome_ts);
printf("Timestamp: %ld\n",rome_ts);
strftime(rome_buffer,75,"%A %B %d, %Y %H:%M:%S %Z",rome_info);
printf("%s, dst? = %d\n",rome_buffer,rome_info->tm_isdst);
printf("\n");

rome_ts = -1680483600;
rome_info = localtime(&rome_ts);
printf("Timestamp: %ld\n",rome_ts);
strftime(rome_buffer,75,"%A %B %d, %Y %H:%M:%S %Z",rome_info);
printf("%s, dst? = %d\n",rome_buffer,rome_info->tm_isdst);
printf("\n");

rome_ts = -1680483599;
rome_info = localtime(&rome_ts);
printf("Timestamp: %ld\n",rome_ts);
strftime(rome_buffer,75,"%A %B %d, %Y %H:%M:%S %Z",rome_info);
printf("%s, dst? = %d\n",rome_buffer,rome_info->tm_isdst);
printf("\n\n\n");

Вывод показал, что localtime () согласуется с моим временем перехода:

Мой первый переход: Отметка времени:

-1690851601 Пятница, 2 июня 1916 г., 23:59:59 CET.= 0

Отметка времени: -1690851600 Суббота 3 июня 1916 г. 01:00:00 CEST, dst?= 1

Отметка времени: -1690851599 Суббота 3 июня 1916 г. 01:00:01 CEST, dst?= 1

Первый переход TimeandDate.com:

Метка времени: -1690768801 Суббота 3 июня 1916 г. 23:59:59 CEST, dst?= 1

Отметка времени: -1690768800 Воскресенье 04 июня 1916 г. 00:00:00 CEST, dst?= 1

Метка времени: -1690768799 воскресенье 04 июня 1916 00:00:01 CEST, dst?= 1

Мой второй переход: метка времени:

-1680483601 Воскресенье, 1 октября 1916 г. 00:59:59 CEST, dst?= 1

Отметка времени: -1680483600 воскресенье 01 октября 1916 г. 00:00:00 CET, dst?= 0

Отметка времени: -1680483599 Воскресенье 01 октября 1916 г. 00:00:01 CET, dst?= 0

...