use Time::Local qw( timelocal ); $ENV{TZ} = 'America/St_Johns'; for my $time ( timelocal(0, 25, 16, 26, 4-1, 2007), # 16th hour of 2007-04-26 timelocal(0, 35, 16, 26, 4-1, 2007), # 16th hour of 2007-04-26 ) { my $hour = int( $time / 3600 ) * 3600; print(scalar(localtime($time)), "\n"); # Should print the same value for both, but doesn't. print("$hour\n"); }