NeilSaunders has asked for the wisdom of the Perl Monks concerning the following question:
For which I get the output:#!/usr/bin/perl use POSIX; use Time::Local; print "Timezone: " . $ENV{TZ} . "\n\n"; &dateTimeToTimestamp("2008-03-30T00:59:59"); &dateTimeToTimestamp("2008-03-30T01:00:00"); &dateTimeToTimestamp("2008-03-30T01:00:01"); &dateTimeToTimestamp("2008-03-30T02:00:00"); &dateTimeToTimestamp("2008-10-26T00:59:59"); &dateTimeToTimestamp("2008-10-26T01:00:00"); &dateTimeToTimestamp("2008-10-26T01:00:01"); &dateTimeToTimestamp("2008-10-26T01:00:02"); &dateTimeToTimestamp("2008-10-26T01:30:00"); &dateTimeToTimestamp("2008-10-26T01:30:01"); &dateTimeToTimestamp("2008-10-26T01:30:01"); &dateTimeToTimestamp("2008-10-26T01:45:00"); &dateTimeToTimestamp("2008-10-26T01:50:00"); &dateTimeToTimestamp("2008-10-26T01:55:00"); &dateTimeToTimestamp("2008-10-26T01:55:59"); &dateTimeToTimestamp("2008-10-26T01:56:00"); &dateTimeToTimestamp("2008-10-26T01:57:00"); &dateTimeToTimestamp("2008-10-26T01:58:00"); &dateTimeToTimestamp("2008-10-26T01:59:58"); &dateTimeToTimestamp("2008-10-26T01:59:59"); &dateTimeToTimestamp("2008-10-26T02:00:00"); &dateTimeToTimestamp("2008-10-26T02:00:01"); &dateTimeToTimestamp("2008-10-26T02:59:59"); &dateTimeToTimestamp("2008-10-26T03:00:00"); &dateTimeToTimestamp("2008-10-26T03:00:01"); sub dateTimeToTimestamp { print $_[0] . " "; $_[0] =~ /(\d{4})-(\d{2})-(\d{2})([ |T])(\d{2}):(\d{2}):(\d{2} +)/; my($year, $mon, $day, $GMT, $hour, $min, $sec) = ($1, $2, $3, +$4, $5, $6, $7); print "UTC\t" . timegm($sec, $min, $hour, $day, $mon - 1, $yea +r - 1900) . "\t"; print "BST\t" . mktime($sec, $min, $hour, $day, $mon - 1, $yea +r - 1900, 0, 0) . "\n"; }
So we can see that on the 30th of March, 1AM fails to exist in BST, as it gets shifted forwards an hour - All is good. My confusion is what happens on the 26th of October, as the time seems to go back at 01:56:00am instead of 02:00:00am. I can see the output change as I change timezones in Windows, but am confused as to where this 4 minute disparity comes from.2008-03-30T00:59:59 UTC 1206838799 BST 1206838799 2008-03-30T01:00:00 UTC 1206838800 BST 2008-03-30T01:00:01 UTC 1206838801 BST 2008-03-30T02:00:00 UTC 1206842400 BST 1206838800 ------------------------------------------------ << Added for clarity 2008-10-26T00:59:59 UTC 1224982799 BST 1224979199 2008-10-26T01:00:00 UTC 1224982800 BST 1224979200 2008-10-26T01:00:01 UTC 1224982801 BST 1224979201 2008-10-26T01:00:02 UTC 1224982802 BST 1224979202 2008-10-26T01:30:00 UTC 1224984600 BST 1224981000 2008-10-26T01:30:01 UTC 1224984601 BST 1224981001 2008-10-26T01:30:01 UTC 1224984601 BST 1224981001 2008-10-26T01:45:00 UTC 1224985500 BST 1224981900 2008-10-26T01:50:00 UTC 1224985800 BST 1224982200 2008-10-26T01:55:00 UTC 1224986100 BST 1224982500 2008-10-26T01:55:59 UTC 1224986159 BST 1224982559 2008-10-26T01:56:00 UTC 1224986160 BST 1224986160 <<< + BST Ends at 01:56:00?? 2008-10-26T01:57:00 UTC 1224986220 BST 1224986220 2008-10-26T01:58:00 UTC 1224986280 BST 1224986280 2008-10-26T01:59:58 UTC 1224986398 BST 1224986398 2008-10-26T01:59:59 UTC 1224986399 BST 1224986399 2008-10-26T02:00:00 UTC 1224986400 BST 1224986400 2008-10-26T02:00:01 UTC 1224986401 BST 1224986401 2008-10-26T02:59:59 UTC 1224989999 BST 1224989999 2008-10-26T03:00:00 UTC 1224990000 BST 1224990000 2008-10-26T03:00:01 UTC 1224990001 BST 1224990001
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re: Perl mktime/gmtime peculiarities (Inc. Testcase) [Cygwin/Windows]
by Anonymous Monk on Aug 04, 2008 at 14:39 UTC | |
by Anonymous Monk on Aug 04, 2008 at 15:15 UTC |