I am reading from the timezone files generated from the Olson database to find when timezones change, and what they change to. The format of the timezone files is described in tzfile.h
.
For my question, I will use the data I got for Europe/Rome.
I might have it working correctly, because my output correctly matches what timeanddate.com says. For example, my program correctly says that:
On March 28, 1982 02:00:00 the timezone changes to GMT +2.000000.
On September 26, 1982 03:00:00 the timezone changes to GMT +1.000000.
This is confirmed here: http://www.timeanddate.com/worldclock/clockchange.html?n=215&year=1982
However, I am unsure if I need to use tzh_ttisstdcnt and tzh_ttisgmtcnt.
From tzfile.h:
Then there are tzh_ttisstdcnt standard/wall indicators, each stored as a one-byte value; they tell whether the transition times associated with local time types were specified as standard time or wall clock time, and are used when a timezone file is used in handling POSIX-style timezone environment variables.
Finally, there are tzh_ttisgmtcnt UTC/local indicators, each stored as a one-byte value; they tell whether the transition times associated with local time types were specified as UTC or local time, and are used when a timezone file is used in handling POSIX-style timezone environment variables.
I have found that each "time-type" (ttinfo struct) has a isstd and isgmt byte. These are the 6 "time-types" for Europe/Rome:
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
makes it sound like isstd and isgmt tell you how the transition times are stored (gmt vs localtime). However, my code currently assumes that all transitions times are stored as GMT. My program's output matches timeanddate.com for all 6 transition types.
Also, I don't understand how types 0 and 1 can be std and not gmt. I thought GMT was standard time.
Any explanation would be great.
Edit:
It appears that my output is almost matching the data on timeanddate.com when I ignore the isstd and isgmt options. I am currently interpreting all transition times as GMT:
Transition types for Rome:
new type 0: isdst = 1 offset = 7200 abbreviation = 0 isstd = 1 isgmt = 0
new type 1: isdst = 0 offset = 3600 abbreviation = 5 isstd = 1 isgmt = 0
new type 2: isdst = 1 offset = 7200 abbreviation = 0 isstd = 0 isgmt = 0
new type 3: isdst = 0 offset = 3600 abbreviation = 5 isstd = 0 isgmt = 0
new type 4: isdst = 1 offset = 7200 abbreviation = 0 isstd = 1 isgmt = 1
Data for Rome (assuming all transition time are given as 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): Oct开发者_JS百科ober 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
My 2nd and 4th transition are an hour later than those listed here, but almost everything else looks like it matches.
'Standard time' refers to 'winter time' as opposed to 'summer time' or 'daylight saving time'. Yes, GMT (loosely; strictly, UTC) is 'the standard for time', but it is not quite the same as what is being referred to by the 'isstd' column in your data.
The point about 'isstd' being 0 or 1 is that the transition times in Europe are (normally) specified to take place at 02:00 in the current time zone.
Thus, the clocks for Europe/Rome went:
1982-03-28 01:59:59 (UTC+01:00)
1982-03-28 03:00:00 (UTC+02:00)
This transition was documented to occur at 02:00 standard time (so isstd = 1
), but this was not a UTC (GMT) time; hence it was a Type 0 transition in your list. Conversely, in the autumn, the clocks went:
1982-09-26 01:59:59 (UTC+02:00)
1982-09-26 01:00:00 (UTC+01:00)
The transition was documented to occur at 02:00 in time zone prevailing prior to the switch, so isstd = 0
(but it was not a UTC (GMT) time); hence, it was a Type 3 transition in your list.
The other combinations (types 1, 2, 4, 5) appear in other circumstances. For the same two transitions, you'd use a type 4 entry and document the change time as 01:00 UTC (because 01:00:00+00:00 is the same as 02:00:00+01:00; and you'd use a type 5 entry and document the change time as 00:00 UTC (because 00:00:00+00:00 is the same as 02:00:00+02:00). Note that the switch times here are different from each other. Analogous differences in the description apply to types 1 and 2.
I was going to edit my original post, but it says that it is too long:
Update:
I am thinking that my data is correct, and TimeAndDate.com has a minor bug.
For my tests, I focused on the first 2 transitions for Rome.
My data was:
type: 0, transition time in file:-1690851600
Add previous offset to get local transition time: June 03, 1916 00:00:00 New timezone is GMT+2
type: 1, transition time in file:-1680483600
Add previous offset to get local transition time: October 01, 1916 01:00:00 New timezone is GMT+1
TimeAndDate's data shows:
1.) Saturday, June 3, 1916 11:59:59 PM
Sunday, June 4, 1916 12:00:00 Midnight → 1:00:00 AM +1h UTC+2h CEST DST starts
2.) Saturday, September 30, 1916 11:59:59 PM
12:00:00 Midnight → 11:00:00 PM No UTC+1h CET DST ends
I set my computer's timezone and local time to match Rome. Then, I ran the following code:
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");
The output showed that localtime() agreed with my transition times:
My first transition: Timestamp:
-1690851601 Friday June 02, 1916 23:59:59 CET, dst? = 0
Timestamp: -1690851600 Saturday June 03, 1916 01:00:00 CEST, dst? = 1
Timestamp: -1690851599 Saturday June 03, 1916 01:00:01 CEST, dst? = 1
TimeandDate.com's first transition:
Timestamp: -1690768801 Saturday June 03, 1916 23:59:59 CEST, dst? = 1
Timestamp: -1690768800 Sunday June 04, 1916 00:00:00 CEST, dst? = 1
Timestamp: -1690768799 Sunday June 04, 1916 00:00:01 CEST, dst? = 1
My second transition: Timestamp:
-1680483601 Sunday October 01, 1916 00:59:59 CEST, dst? = 1
Timestamp: -1680483600 Sunday October 01, 1916 00:00:00 CET, dst? = 0
Timestamp: -1680483599 Sunday October 01, 1916 00:00:01 CET, dst? = 0
精彩评论