Acme-Tools
view release on metacpan or search on metacpan
t/27_timestuff.t view on Meta::CPAN
$ENV{TZ}='CET';
#$ENV{TZ}='Europe/Oslo';
#$ENV{TZ}='Asia/Kolkata';
require POSIX; POSIX::tzset();
my $t =1450624919; #20151220-16:21:59 Sun
my $t2=1000000000; #20150909-03:46:40 Sun
my $t3=1560000000; #20190608-15:20:00 Sat
#my @lt=localtime($t);
#print tms($t),"<<- ".tms()."\n";
ok( tms() eq tms( 'YYYYMMDD-HH:MI:SS') ,'no args');
ok( tms($t) eq tms($t,'YYYYMMDD-HH:MI:SS') ,'one arg');
sub tst {my($fasit,@arg)=@_;my $tms=tms(@arg); ok($tms eq $fasit, "$fasit = $tms")}
tst('16:21:59', 'HH:MI:SS',$t);
tst('16:21', 'HH:MI',$t);
tst('2015', 'YYYY',$t);
tst('2015', $t,'YYYY');
tst('2015-DEC-20', $t,'YYYY-MON-DD');
tst('2015-Dec-20', $t,'YYYY-Mon-DD');
tst('2015-dec-20', $t,'YYYY-mon-DD');
tst('Sunday 12/20-2015', $t,'Day MM/D-YYYY');
tst('Sunday 09/9-2001', $t2,'Day MM/D-YYYY');
tst('Sun 09/9-2001', $t2,'Dy MM/D-YYYY');
tst('Sun 9/09-2001', $t2,'Dy M/DD-YYYY');
tst('Sat 6/8-2019', $t3,'Dy M/D-YYYY');
tst('sat 8/6-2019', $t3,'dy D/M-YYYY');
tst('04:21 pm', $t,'HH12:MI pm');
tst('04:21 pm', $t,'HH12:MI am');
tst('04:21 PM', $t,'HH12:MI PM');
tst('04:21 PM', $t,'HH12:MI AM');
tst('03:46 am', $t2,'HH12:MI pm');
tst('03:46 am', $t2,'HH12:MI am');
tst('03:46 AM', $t2,'HH12:MI PM');
tst('03:46 AM', $t2,'HH12:MI AM');
tst('1971',6e7,'CCYY');tst('20',16e8,'CC');
#tst('21',6e9,'CC'); #ok in newer perls
tst('7',$t,'dow');tst('6',$t3,'dow');
tst('0',$t,'d0w');tst('6',$t3,'d0w');tst('0',$t,'dow0');tst('6',$t3,'dow0');
tst('59', $t+0.1, 'SS');
tst('59', $t+0.1, 'SS.0');
tst('59.00', $t, 'SS.2');
tst('59.100', $t+0.1, 'SS.3');
tst('59.00090',$t+0.0009, 'SS.5');
tst('59.000', $t, 'SS.3');
tst('354',$t,'doy');tst('353',$t,'doy0');tst('353',$t,'d0y');
#--------------------------------------------------------------------------------
my $tt='20151229-19:13';
# more
#-- easter
ok( '384f0eefc22c35d412ff01b2088e9e05' eq md5_hex( join",", map{easter($_)} 1..5000), 'easter');
sub EasterSunday { #https://no.wikipedia.org/wiki/P%C3%A5skeformelen
my $year=shift;
my $a = $year % 19;
my $b = int($year/100);
my $c = $year % 100;
my $d = int($b/4);
my $e = $b % 4;
my $f = int(($b+8)/25);
my $g = int(($b-$f+1)/3);
my $h = (19*$a+$b-$d-$g+15) % 30;
my $i = int($c/4);
my $k = $c % 4;
my $l = (32 + 2*$e + 2*$i - $h - $k) % 7;
my $m = int(($a+11*$h+22*$l)/451);
my $n = int(($h+$l-7*$m+114)/31);
my $p = ($h+$l-7*$m+114) % 31;
(++$p,$n);
}
my @diff;
for(1498..1e4){ #1498..1e7 ok also!
my $e1=join",",easter($_);
my $e2=join",",EasterSunday($_);
push @diff, "easter year $_ e1=$e1 e2=$e2" if $e1 ne $e2;
}
ok(@diff==0,'easter formula1 and 2 eq from year 1498 to 10000');
#--time_fp
ok( time_fp() =~ /^\d+\.\d+$/ , 'time_fp' );
#--sleep_fp
sleep_fp(0.01); #init, require Time::HiRes
my $tfp=time_fp();
sleep_fp(0.1);
my $diff=abs(time_fp()-$tfp-0.1);
#-fails on many systems...virtual boxes?
#$^O eq 'linux'
#? ok($diff < 0.03, "sleep_fp, diff=$diff < 0.03") #off 30% ok
#: ok (1);
sleeps(0.010);
sleepms(10);
sleepus(10000);
sleepns(10000000);
if(eval{require Date::Parse}){
is(s2t("18/februar/2019:13:53","MM"),'02','s2t MM');
is(join(" ; ",s2t("18/februar/2019:13:53","DD","MM","YYYY","YYYYMMDD-HH24:MI:SS")), '18 ; 02 ; 2019 ; 20190218-13:53:00','s2t...');
is( s2t($$_[1]), $$_[0], "ok s2t('$$_[1]')" ) for map[split/\s/,$_,2],grep$_,map trim,split"\n","
1555588437 20190418-13:53:57
1555588437 2019-04-18T13:53:57
1555588437 18. april 2019 13:53:57
1555588437 18/Apr/2019:13:53:57
1555588437 1555588437
1555588437 1555588437001
1555588380 20190418-13:53
1555588380 2019-04-18T13:53
1555588380 18. april 2019 13:53
1555588380 18/Apr/2019:13:53
1558180380 18/Mai/2019:13:53
1558180380 18/May/2019:13:53
1550494380 18/februar/2019:13:53
1550494380 18/February/2019:13:53
1000000000 9/Sep/2001:03:46:40
1000000000 9/9/2001:03:46:40"
} else { ok(1) for 1..18 }
__END__
http://stackoverflow.com/questions/753346/how-do-i-set-the-timezone-for-perls-localtime
https://en.wikipedia.org/wiki/Tz_database
perl -MPOSIX -le' print for tzname' #GMT GMT
perl -MPOSIX -le'tzset;print for tzname' #CET CEST
( run in 0.577 second using v1.01-cache-2.11-cpan-39bf76dae61 )