The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
use strict;
use warnings;
#use Data::Dumper; $Data::Dumper::Indent = 1;
use Test::More;

plan skip_all => 'set ATOMPUB_TEST_LIVE to enable this test'
    unless $ENV{ATOMPUB_TEST_LIVE};
plan tests => 11;

# current time is "Mon Jan 01 10:00:00 2007" in your timezone
BEGIN {
    use HTTP::Date qw(str2time);
    *CORE::GLOBAL::time = sub { str2time '2007-01-01 10:00:00' };
}

use Atompub::DateTime qw(datetime);
use DateTime;
use Time::Local;

sub diff {
    my $dt = DateTime->from_epoch(epoch => time); # in UTC
    my $tz = Atompub::DateTime::tz();             # in local time
    $tz->offset_for_datetime($dt);                # diff in sec.
}

sub tz {
    my $diff = diff();
    my $tz = sprintf "%+03d:%02d", int( $diff / 3600 ), int( ( $diff % 3600 ) / 60 );
    $tz eq '+00:00' ? 'Z' : $tz;
}

my $dt = datetime;

is $dt->epoch, 1167645600 - diff();
is $dt->iso,   '2007-01-01 10:00:00';
is $dt->w3c,   '2007-01-01T10:00:00' . tz();

like $dt->isoz, qr{^20\d\d-\d\d-\d\d \d\d:\d\d:\d\dZ$};
like $dt->w3cz, qr{^20\d\d-\d\d-\d\dT\d\d:\d\d:\d\dZ$};
like $dt->str,  qr{^[a-z]{3},\s+\d{1,2}\s+[a-z]{3}\s+20\d\d\s+\d\d:\d\d:\d\d\s+GMT$}i;

is "$dt", $dt->w3c;
is 0+$dt, $dt->epoch;

my $dt2 = datetime($dt);

ok $dt = $dt2;

$dt2 = datetime($dt->epoch + 1);

ok $dt  < $dt2;
ok $dt != $dt2;