Bill Stephenson wrote:
When converting DMYHMS to Epoch Seconds and back I get cheated out of a day. 
Why?

Bill

--

#!/usr/bin/perl

use strict;
use warnings;
use Time::Local;

my ($time, $month, $day, $year, $seconds, $minutes, $hours, $wday, $yday, 
$isdst);

my $start_date = '11/30/2012';

print "$start_date \n";

($month, $day, $year) = split(/\//, $start_date);

print $time = timegm($seconds, $minutes, $hours, $day, $month-1, $year-1900);
                ^^^^^^
                ******


print "\n";

($seconds, $minutes, $hours, $day, $month, $year, $wday, $yday, $isdst) = 
localtime($time);

     ^^^^^^^^^

     *********



$month++;

$year = ($year+1900);

print "$month/$day/$year \n";

# output:
# 11/30/2012
# 1354233600
# 11/29/2012

You are using GMT for one conversion and local time for the other. Best to use GMT for both conversions:

$ perl -le'
use strict;
use warnings;
use Time::Local;

my ( $time, $month, $day, $year, $seconds, $minutes, $hours );
my $start_date = q[11/30/2012];
print $start_date;
( $month, $day, $year ) = split /\//, $start_date;
print $time = timegm( $seconds, $minutes, $hours, $day, $month - 1, $year - 1900 );
( $seconds, $minutes, $hours, $day, $month, $year ) = gmtime $time;
$month++;
$year += 1900;
print "$month/$day/$year";
'
11/30/2012
1354233600
11/30/2012




John
--
Any intelligent fool can make things bigger and
more complex... It takes a touch of genius -
and a lot of courage to move in the opposite
direction.                   -- Albert Einstein

--
To unsubscribe, e-mail: beginners-unsubscr...@perl.org
For additional commands, e-mail: beginners-h...@perl.org
http://learn.perl.org/


Reply via email to