TimeDate-2.30/000755 000765 000765 00000000000 12110501144 013365 5ustar00gbarrgbarr000000 000000 TimeDate-2.30/ChangeLog000644 000765 000765 00000025051 12110500617 015146 0ustar00gbarrgbarr000000 000000 2.30 -- Mon Feb 18 13:31:03 CST 2013 * Syncing distribution version number with Date::Parse, not functional changes 1.20 -- Sat Dec 12 06:38:14 CST 2009 * Typo => s/timezome/timezone/ [yanick] * RT#52387 Fix %s formating to use timelocal when no timezone is given * RT#51664 fix str2time('16 Oct 09') to not give a negative result 1.19 -- Fri Sep 25 13:59:41 CDT 2009 * Replace Date::Language::Hungarian with version from CPAN by Lee Goddard 1.18 -- Thu Sep 24 17:43:28 CDT 2009 * RT#49963 Skip pre 1970 date tests on Win32 * Added Date::Language::Hungarian (Konrad Lorinczi) 1.17 -- Sat Sep 19 10:56:12 CDT 2009 Bugfixes * RT#45067: Date::Format with %z gives wrong results for half-hour timezones (Ernesto Hernndez-Novich) * RT#48164: Date::Parse unable to set seconds correctly * RT#17396: Parse error for french date with 'mars' (march) as month Documentation * Fixed documentation for %e in Date::Format * Update documentation to remove Date::Format->language Enhancements * Add support for dates like Jul-13-1999 (Brett Warden) * Added Icelandic language (Tomas Edwardsson) * Added Romanian language (Doru Petrescu) * Added Russian language (Denis Poznyakov & Danil Pismenny) * Added Turkish language (Burak Gursoy) * Added Spanish language (Adrian Mugnolo) * Added Chinese language (Kang-min Liu) * Support parsing dates like 2002-02-26-10:37:21.141 as used by lpd * Support Z timezone when only the time is specified * Added METDST to Time::Zone * Added AKST/AKDT to Time::Zone Changes prior to 1.17 Change 814 on 2003/06/03 by (Graham Barr) Date::Parse - Time::Local in 5.8 does not support fractional seconds Change 813 on 2003/06/02 by (Graham Barr) Release 1.15 Change 812 on 2003/06/02 by (Graham Barr) Fix comments about Language implementation in Date::Parse (patch from Christian Hammers) Change 811 on 2003/06/02 by (Graham Barr) Fix short name for 'maart' to be 'mrt' as suggested by Frank Maas Change 810 on 2003/06/02 by (Graham Barr) Add %G format for GPS week (patch from Eric Richardson) Change 809 on 2003/06/02 by (Graham Barr) Language updates from Daniel Yacob Change 808 on 2003/06/02 by (Graham Barr) str2time("") should return undef Change 807 on 2003/06/02 by (Graham Barr) Added Swedish and Finnish languages from Matthew Musgrove Change 778 on 2003/03/03 by (Graham Barr) Added Chinese_GB language. Supplied by forehead (I don't even pretend tounderstand it) Change 777 on 2003/03/03 by (Graham Barr) Return fractional seconds when specified in an ISO date Change 776 on 2003/03/03 by (Graham Barr) New languages from Daniel Yacob Change 775 on 2003/03/03 by (Graham Barr) Fix UTC support on ISO dates Change 774 on 2003/03/03 by (Graham Barr) Allow a : in a timezone so the dates specified in RSS can be parsed (eg 2002-11-07T23:31:49-05:00) Patch from Kellan Change 773 on 2003/03/03 by (Graham Barr) Support parsing more formats Change 754 on 2002/11/03 by (Graham Barr) Release 1.14 Change 753 on 2002/11/03 by (Graham Barr) Fix bug parsing 2002-11-02 11pm Change 752 on 2002/11/03 by (Graham Barr) Add Greek language module from Matthew Musgrove Change 744 on 2002/09/16 by (Graham Barr) Add Date::Language::Brazilian and Date::Language::Danish to MANIFEST Change 743 on 2002/09/16 by (Graham Barr) Add Date::Language::Brazilian from Christian Tosta Add Date::Language::Danish from Lars Skjrlund Change 742 on 2002/09/16 by (Graham Barr) Time::Zone - Add some zones for Brazil Change 741 on 2002/09/16 by (Graham Barr) Time::Zone [cpan #1299] - Allow $ENV{TZ} to have zomes like EST5 Change 733 on 2002/06/13 by (Graham Barr) Date::Language::French - Fix missing ; Change 732 on 2002/06/06 by (Graham Barr) Release 1.13 Change 731 on 2002/06/06 by (Graham Barr) Fix pattern to allow single digits for month and day (eg '2002-6-1') Change 730 on 2002/06/03 by (Graham Barr) Release 1.12 Change 729 on 2002/06/03 by (Graham Barr) Fix month name abbreviations Change 720 on 2002/04/25 by (Graham Barr) Date::Parse - Make it work with 5.004 again Change 719 on 2002/04/25 by (Graham Barr) Prevent the ISO date pattern matching where it should not. ie there must not be a non-space character directly before the date string Change 718 on 2002/04/17 by (Graham Barr) Change French @Dsuf, from Peter Samuelson Change 712 on 2002/03/07 by (Graham Barr) Added %L format for month number as 1..12 from Adam Monsen Change 708 on 2002/02/28 by (Graham Barr) Release 1.11 Change 707 on 2002/02/28 by (Graham Barr) Fix format error in t/date.t Change 692 on 2002/01/09 by (Graham Barr) Be a bit more lenient on the ISO format Change 691 on 2002/01/02 by (Graham Barr) Fix typo in ISO-8601 formats in docs Change 690 on 2001/12/28 by (Graham Barr) Date::Format - Fix array dereference syntax typo Change 689 on 2001/12/28 by (Graham Barr) Date::Format - Fix doc typos Change 682 on 2001/11/20 by (Graham Barr) Date::Parse - Make the minutes and seconds parts of an ISO-8601 optional (patch from Christian Hammers) Change 681 on 2001/11/20 by (Graham Barr) Date::Parse - Allow AM/PM to be just A/P (eg Jul 13 1999 1:23P) as used by MySQL (patch from Drew Degentesh) Change 680 on 2001/11/20 by (Graham Barr) Time::Zone - Add CEST Central European Daylight Change 679 on 2001/11/20 by (Graham Barr) Date::Parse - Extract (but ignore) fractions of a second in an ISO8601 date string (patch from rayg at yahoo-inc.com) Change 678 on 2001/11/20 by (Graham Barr) Add %P to be am or pm Change 677 on 2001/11/20 by (Graham Barr) Date::Language::French - Um, the french have 7 days in the week just like everyone else Change 676 on 2001/11/20 by (Graham Barr) Date::Language::German - Fix abbrev for October (patch from Stefan Niederhauser) Change 634 on 2001/09/03 by (Graham Barr) Add a check for invalid years in format 1995-01-24 Change 580 on 2000/09/04 by (Graham Barr) Release 1.10 Change 579 on 2000/09/04 by (Graham Barr) Date::Parse - Support for more date formats Time::Zone - Added more zones Change 539 on 2000/06/14 by (Graham Barr) Documentation updates Change 536 on 2000/06/06 by (Graham Barr) Fix VERSION numbers Change 535 on 2000/06/06 by (Graham Barr) Date::Format - Added support for %O* to support output of roman numerals Change 443 on 2000/03/29 by (Graham Barr) Release 1.09 Change 442 on 2000/03/29 by (Graham Barr) Added PPD stuff to Makefile.PL Change 441 on 2000/03/29 by (Graham Barr) Date::Parse - Allow "s after the timezone Change 440 on 2000/03/29 by (Graham Barr) Date::Format - Fix doc for %c and %C Change 409 on 2000/03/28 by (Graham Barr) Moved .pm files into lib directory Change 408 on 2000/03/28 by (Graham Barr) str2time returns undef on error bit Time::Local returns -1. Check if the -1 is real or an error Change 407 on 2000/03/28 by (Graham Barr) Added Eastern European Summer Time EEST Change 268 on 1999/03/18 by (Graham Barr) Date::Format, Time::Zone - Fix problem with %z and %Z as suggested by Jason A Smith Change 267 on 1999/03/18 by (Graham Barr) - Make t/getdate.t more portable as suggested by Paul Schinder Change 250 on 1999/02/06 by (Graham Barr) Date::Format - Correct docs for %d and %e Change 249 on 1999/02/06 by (Graham Barr) Added Date::Language::Czech Change 180 on 1998/08/05 by (Graham Barr) Date::Language - Added Date::Language::French contributed by Emmanuel Bataille (bem@residents.frmug.org) - Split out the languages into .pm's Date::Parse - Added patch from Alan Burlison to Date::Parse to allow zone offests +7, +10 and +700 - Parse now supports GMT+0100 *** Release 1.08 Fri Jan 2 1998 (Graham Barr) Date::Format, Time::Zone - Fix for formatting %z and %Z all - Update Email address and year Tue Feb 17 1998 (Graham Barr) Date::Language - Added format_o to German Fri Sep 12 1997 (Graham Barr) Date::Parse - Added 'DST' to parser, it adjusts $zone by 3600 (but that may not be right in all cases) - Added a check to str2time to ensure valid values are passed to Time::Local, to avoid croak-ing - Fixed to treat AM and PM correctly when the hour is 12. (I hope :-) Time::Zone - Modified for Western Australia Tue 07 Jan 1996 o Release 1.07 o Fixed a problem in Time::Zone (had @l[8] instead of $l[8], doh! ) Thu 02 Jan 1996 o Release 1.06 o Fixed t/getdate.t o Date::Parse can now parse the date-format 960913, which apparently is fairly common in sweden. Wed 31 Jul 1996 o Release 1.05 o Modified Date::Format not to use single letter sub names, all format sub names are nore prefixed with format_ o Cleaned up Date/Format.pm so that AUTOLOAD is not required o Patched Date/Language.pm to add Norwegian. Thanks to Gisle Aas for the patch Thu 27 Jun 1996 o Added %z to Date::Format to output timezone in +/-0000 format o Added multi-language support via Date::Language,. Tue 25 Jun 1996 o Some code tidying up o added a new test, copied from Date::GetDate o improved performance Wed 22 May 1996 o Fixed a bug in the parser for dates in a default (local) timezone but a different dst Wed 15 May 1996 o Added support for mainframe type dates Fri 3 May 1996 o Added %s to date formatting at request of Josh Osborne . TimeDate-2.30/lib/000755 000765 000765 00000000000 12110501140 014127 5ustar00gbarrgbarr000000 000000 TimeDate-2.30/Makefile.PL000644 000765 000765 00000001070 12110500455 015341 0ustar00gbarrgbarr000000 000000 # This -*- perl -*- script makes the Makefile BEGIN { require 5.004 } use strict; use warnings; use ExtUtils::MakeMaker; WriteMakefile( NAME => 'Date::Parse', DISTNAME => 'TimeDate', AUTHOR => 'Graham Barr ', VERSION_FROM => 'lib/Date/Parse.pm', (eval { ExtUtils::MakeMaker->VERSION(6.21) } ? (LICENSE => 'perl') : ()), ( eval { ExtUtils::MakeMaker->VERSION(6.46) } ? ( META_MERGE => { resources => { ## repository => 'http://github.com/gbarr/perl-TimeDate', }, } ) : () ), ); TimeDate-2.30/MANIFEST000644 000765 000765 00000002620 12110501141 014513 0ustar00gbarrgbarr000000 000000 ChangeLog lib/Date/Format.pm lib/Date/Language.pm lib/Date/Language/Afar.pm lib/Date/Language/Amharic.pm lib/Date/Language/Austrian.pm lib/Date/Language/Brazilian.pm lib/Date/Language/Bulgarian.pm lib/Date/Language/Chinese.pm lib/Date/Language/Chinese_GB.pm lib/Date/Language/Czech.pm lib/Date/Language/Danish.pm lib/Date/Language/Dutch.pm lib/Date/Language/English.pm lib/Date/Language/Finnish.pm lib/Date/Language/French.pm lib/Date/Language/Gedeo.pm lib/Date/Language/German.pm lib/Date/Language/Greek.pm lib/Date/Language/Hungarian.pm lib/Date/Language/Icelandic.pm lib/Date/Language/Italian.pm lib/Date/Language/Norwegian.pm lib/Date/Language/Oromo.pm lib/Date/Language/Romanian.pm lib/Date/Language/Russian.pm lib/Date/Language/Russian_cp1251.pm lib/Date/Language/Russian_koi8r.pm lib/Date/Language/Sidama.pm lib/Date/Language/Somali.pm lib/Date/Language/Spanish.pm lib/Date/Language/Swedish.pm lib/Date/Language/Tigrinya.pm lib/Date/Language/TigrinyaEritrean.pm lib/Date/Language/TigrinyaEthiopian.pm lib/Date/Language/Turkish.pm lib/Date/Parse.pm lib/Time/Zone.pm Makefile.PL MANIFEST This list of files README t/cpanrt.t t/date.t t/format.t t/getdate.t t/lang.t META.yml Module YAML meta-data (added by MakeMaker) META.json Module JSON meta-data (added by MakeMaker) SIGNATURE Public-key signature (added by MakeMaker) TimeDate-2.30/META.json000644 000765 000765 00000001630 12110501141 015003 0ustar00gbarrgbarr000000 000000 { "abstract" : "unknown", "author" : [ "Graham Barr " ], "dynamic_config" : 1, "generated_by" : "ExtUtils::MakeMaker version 6.64, CPAN::Meta::Converter version 2.120921", "license" : [ "perl_5" ], "meta-spec" : { "url" : "http://search.cpan.org/perldoc?CPAN::Meta::Spec", "version" : "2" }, "name" : "TimeDate", "no_index" : { "directory" : [ "t", "inc" ] }, "prereqs" : { "build" : { "requires" : { "ExtUtils::MakeMaker" : "0" } }, "configure" : { "requires" : { "ExtUtils::MakeMaker" : "0" } }, "runtime" : { "requires" : {} } }, "release_status" : "stable", "resources" : { "repository" : { "url" : "http://github.com/gbarr/perl-TimeDate" } }, "version" : "2.30" } TimeDate-2.30/META.yml000644 000765 000765 00000000774 12110501140 014642 0ustar00gbarrgbarr000000 000000 --- abstract: unknown author: - 'Graham Barr ' build_requires: ExtUtils::MakeMaker: 0 configure_requires: ExtUtils::MakeMaker: 0 dynamic_config: 1 generated_by: 'ExtUtils::MakeMaker version 6.64, CPAN::Meta::Converter version 2.120921' license: perl meta-spec: url: http://module-build.sourceforge.net/META-spec-v1.4.html version: 1.4 name: TimeDate no_index: directory: - t - inc requires: {} resources: repository: http://github.com/gbarr/perl-TimeDate version: 2.30 TimeDate-2.30/README000644 000765 000765 00000001453 11310706316 014261 0ustar00gbarrgbarr000000 000000 This is the perl5 TimeDate distribution. It requires perl version 5.003 or later This distribution replaces my earlier GetDate distribution, which was only a date parser. The date parser contained in this distribution is far superior to the yacc based parser, and a *lot* fatser. The parser contained here will only parse absolute dates, if you want a date parser that can parse relative dates then take a look at the Time modules by David Muir on CPAN. You install the library by running these commands: perl Makefile.PL make make test make install Please report any bugs/suggestions to Copyright 1995-2009 Graham Barr. This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself. Share and Enjoy! Graham TimeDate-2.30/SIGNATURE000644 000765 000765 00000010014 12110501144 014645 0ustar00gbarrgbarr000000 000000 This file contains message digests of all files listed in MANIFEST, signed via the Module::Signature module, version 0.70. To verify the content in this distribution, first make sure you have Module::Signature installed, then type: % cpansign -v It will check each file's integrity, as well as the signature's validity. If "==> Signature verified OK! <==" is not displayed, the distribution may already have been compromised, and you should not run its Makefile.PL or Build.PL. -----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 SHA1 00fa067571b7bc7806dd9109f6577aa309236fd3 ChangeLog SHA1 c4d9a2add4bdf790e5e25663f34352b8e0948a56 MANIFEST SHA1 c58ec3281ea7c1532d67095c60348ce8f53bdc49 META.json SHA1 421e12445cd12c9649b4e7f1b88724a9b237c0b0 META.yml SHA1 d429709aeaefa05cbffa6958efb4ca3cd71a3121 Makefile.PL SHA1 80cff3b1f65e7df95eaa1a992b688c2c5e1d2b6e README SHA1 5ca10e18e888daf0883de553219f42ca2422763f lib/Date/Format.pm SHA1 395b9d58324f92d4ec56d631fcc2f08d9d8c289b lib/Date/Language.pm SHA1 50703aeade60a04398517416d30a2d8918c95578 lib/Date/Language/Afar.pm SHA1 f9450ca0047510a4102c32cc4e20a435cdd85b31 lib/Date/Language/Amharic.pm SHA1 f00534703736026830f729445d0d6f582481a05e lib/Date/Language/Austrian.pm SHA1 c5af5f819bbd3eff3b404e62f1a3735d7e4a038b lib/Date/Language/Brazilian.pm SHA1 73b6db5c2f56905658cfa42ed01ee436fc5abc82 lib/Date/Language/Bulgarian.pm SHA1 e89738e9f3611a6de79cef7e791c20a05ac2a057 lib/Date/Language/Chinese.pm SHA1 d8765df8f8368d6b467a87b1f32397d50253747a lib/Date/Language/Chinese_GB.pm SHA1 f5061baf9b980aa0e8feefab059214775bb8182e lib/Date/Language/Czech.pm SHA1 0f343e466e38735808d78f9871ca7df7b45ea871 lib/Date/Language/Danish.pm SHA1 8566be869607c2b2024821def260de5a828f005f lib/Date/Language/Dutch.pm SHA1 ab20e0b3487b85a54a3d6321b50d01d43fe78427 lib/Date/Language/English.pm SHA1 9b057eea719ed24f643f4d284cf1fa6ae594e7dc lib/Date/Language/Finnish.pm SHA1 105169f2848df40ac1111f0130ec1bb4b74647d8 lib/Date/Language/French.pm SHA1 dc2f9c1cee48be3b73613ca9ed1291e9c976a37e lib/Date/Language/Gedeo.pm SHA1 794a9b715e66fdcc428a65b2972ced4fee62b52c lib/Date/Language/German.pm SHA1 863bb62fd08b3e61c63a2df3d65323d8e6c1b651 lib/Date/Language/Greek.pm SHA1 8f0678fee75492f3675cf0b130fd39c7a589a552 lib/Date/Language/Hungarian.pm SHA1 34da50806290fe731fd1e01290728fcd0b6d02a2 lib/Date/Language/Icelandic.pm SHA1 de5069f424fed480586bc2dcff1cca1930bf98a1 lib/Date/Language/Italian.pm SHA1 e4e81280ba513a3ab6e0bee01704913dd730c9a8 lib/Date/Language/Norwegian.pm SHA1 13165e5b72586200a106aa2870fe92b49d94dd8c lib/Date/Language/Oromo.pm SHA1 71eaea1d32b8fcfa23c5a815e3fa54b9f84af80c lib/Date/Language/Romanian.pm SHA1 806f38e0789bf10f2e843c69f68bcfa50c0d78eb lib/Date/Language/Russian.pm SHA1 292c36c93532a57b667d7deedc23cefbb9bf478c lib/Date/Language/Russian_cp1251.pm SHA1 26efbebc7afd065da56ec09ee3b062a9ddd4a2d3 lib/Date/Language/Russian_koi8r.pm SHA1 d1658daedcf106f01869a4371b9c3e572330f864 lib/Date/Language/Sidama.pm SHA1 58f9ded75fc18c26eeb96ce6374e66565ad01494 lib/Date/Language/Somali.pm SHA1 8b970f347eb0718e210d7613db5ba88b124d189e lib/Date/Language/Spanish.pm SHA1 a52f8968a0fdf3e735d62f71b91d6b64a5f98fa3 lib/Date/Language/Swedish.pm SHA1 5da829cf39dc01331ad58f66eced0a1f47e346b6 lib/Date/Language/Tigrinya.pm SHA1 20fc6beb32657ca147719f713ff816bbb696da20 lib/Date/Language/TigrinyaEritrean.pm SHA1 30f77a43a000f2ce3d22b1b633261a20289025aa lib/Date/Language/TigrinyaEthiopian.pm SHA1 54288741c52b09ee92b0487848df74a08cdc3b9e lib/Date/Language/Turkish.pm SHA1 b10ec48bd01b73638e4c6dce3f554e4c77267b6c lib/Date/Parse.pm SHA1 394c7d372c25107ba5151ceca44c0599188907c7 lib/Time/Zone.pm SHA1 ee65cf5b634d907c4cc2d414e49c06175461e6ac t/cpanrt.t SHA1 7b16580497a96a4bc551b87b8b97ec89331e81f8 t/date.t SHA1 54016044b60514ce4528d1c813c344714595da59 t/format.t SHA1 acef4dd152cd391a3e7a7945c8405a50d965f335 t/getdate.t SHA1 7d033481dab637f54b0c168e64ad1406731a1af6 t/lang.t -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.11 (Darwin) iEYEARECAAYFAlEigmEACgkQR0BL4gbYw3SJOwCgjnXIVH+iDOco6297z4ao7ryX DgQAnRpKYNCQBsjsSO4YX6aqOp9ywhMh =3xgB -----END PGP SIGNATURE----- TimeDate-2.30/t/000755 000765 000765 00000000000 12110501140 013624 5ustar00gbarrgbarr000000 000000 TimeDate-2.30/t/cpanrt.t000644 000765 000765 00000003065 11310706710 015317 0ustar00gbarrgbarr000000 000000 use Date::Format qw(time2str strftime); use Date::Parse qw(strptime str2time); print "1..8\n"; my $i = 1; { # RT#45067 Date::Format with %z gives wrong results for half-hour timezones foreach my $zone (qw(-0430 -0445)) { my $zone_str = time2str("%Z %z", time, $zone); print "# $zone => $zone_str\n"; print "not " unless $zone_str eq "$zone $zone"; print "ok ", $i++, "\n"; } } { # RT#48164: Date::Parse unable to set seconds correctly foreach my $str ("2008.11.30 22:35 CET", "2008-11-30 22:35 CET") { my @t = strptime($str); my $t = join ":", map { defined($_) ? $_ : "-" } @t; print "# $str => $t\n"; print "not " unless $t eq "-:35:22:30:10:108:3600"; print "ok ", $i++, "\n"; } } { # RT#17396: Parse error for french date with 'mars' (march) as month use Date::Language; my $dateP = Date::Language->new('French'); my $timestamp = $dateP->str2time('4 mars 2005'); my ($ss, $mm, $hh, $day, $month, $year, $zone) = localtime $timestamp; $month++; $year += 1900; my $date = "$day/$month/$year"; print "# $date\n"; print "not " unless $date eq "4/3/2005"; print "ok ", $i++, "\n"; } { # [rt.cpan.org #52387] seconds since the Epoch, UCT my $time = time; my @lt = localtime(time); print "not " unless strftime("%s", @lt) eq $time; print "ok ", $i++, "\n"; print "not " unless time2str("%s",$time) eq $time; print "ok ", $i++, "\n"; } { # [rt.cpan.org #51664] Change in str2time behaviour between 1.16 and 1.19 print "not " if str2time('16 Oct 09') < 0; print "ok ", $i++, "\n"; } TimeDate-2.30/t/date.t000644 000765 000765 00000011326 11310706316 014746 0ustar00gbarrgbarr000000 000000 #!/usr/local/bin/perl -w use Date::Parse; use Date::Format qw(time2str); $data = qq!1995-01-24 1995-01-24T09:08:17.1823213 - 1935-01-24T09:08:17 - Fri Dec 17 00:00:00 1901 GMT Tue Jan 16 23:59:59 2038 GMT 2001-02-02 00:00:00 GMT 2035-02-02 00:00:00 GMT - 16 Jun 33 07:29:35 CST 2002-02-26-10:37:21.141 GMT Wed, 16 Jun 94 07:29:35 CST Wed, 16 Nov 94 07:29:35 CST Mon, 21 Nov 94 07:42:23 CST Mon, 21 Nov 94 04:28:18 CST Tue, 15 Nov 94 09:15:10 GMT Wed, 16 Nov 94 09:39:49 GMT Wed, 16 Nov 94 09:23:17 GMT Wed, 16 Nov 94 12:39:49 GMT Wed, 16 Nov 94 14:03:06 GMT Wed, 16 Nov 94 05:30:51 CST Thu, 17 Nov 94 03:19:30 CST Mon, 21 Nov 94 14:05:32 GMT Mon, 14 Nov 94 15:08:49 CST Wed, 16 Nov 94 14:48:06 GMT Thu, 17 Nov 94 14:22:03 GMT Wed, 16 Nov 94 14:36:00 GMT Wed, 16 Nov 94 09:23:17 GMT Wed, 16 Nov 94 10:01:43 GMT Wed, 16 Nov 94 15:03:35 GMT Mon, 21 Nov 94 13:55:19 GMT Wed, 16 Nov 94 08:46:11 CST 21 dec 17:05 21-dec 17:05 21/dec 17:05 21/dec/93 17:05 dec/21/93 17:05 Dec/21/1993 17:05:00 dec-21-1993 17:05 Dec-21-93 17:05:00 dec 21 1994 17:05 dec 21 94 17:05 dec 21 94 17:05 GMT dec 21 94 17:05 BST dec 21 94 00:05 -1700 dec 21 94 17:05 -1700 Wed, 9 Nov 1994 09:50:32 -0500 (EST) Thu, 13 Oct 94 10:13:13 -0700 Sat, 19 Nov 1994 16:59:14 +0100 Thu, 3 Nov 94 14:10:47 EST Thu, 3 Nov 94 21:51:09 EST Fri, 4 Nov 94 9:24:52 EST Wed, 9 Nov 94 09:38:54 EST Mon, 14 Nov 94 13:20:12 EST Wed, 16 Nov 94 17:09:13 EST Tue, 15 Nov 94 12:27:01 PST Fri, 18 Nov 1994 07:34:05 -0600 Mon, 21 Nov 94 14:34:28 -0500 Fri, 18 Nov 1994 12:05:47 -0800 (PST) Fri, 18 Nov 1994 12:36:26 -0800 (PST) Wed, 16 Nov 1994 15:58:58 GMT 1999 10:02:18 "GMT" Sun, 06 Nov 94 14:27:40 -0500 Mon, 07 Nov 94 08:20:13 -0500 Mon, 07 Nov 94 16:48:42 -0500 Wed, 09 Nov 94 15:46:16 -0500 Fri, 4 Nov 94 16:17:40 "PST Wed, 16 Nov 94 12:43:37 "PST Sun, 6 Nov 1994 02:38:17 -0800 Tue, 1 Nov 1994 13:53:49 -0500 Tue, 15 Nov 94 08:31:59 +0100 Sun, 6 Nov 1994 11:09:12 -0500 (IST) Fri, 4 Nov 94 12:52:10 EST Mon, 31 Oct 1994 14:17:39 -0500 (EST) Mon, 14 Nov 94 11:25:00 CST Mon, 14 Nov 94 13:26:29 CST Fri, 18 Nov 94 8:42:47 CST Thu, 17 Nov 94 14:32:01 +0900 Wed, 2 Nov 94 18:16:31 +0100 Fri, 18 Nov 94 10:46:26 +0100 Tue, 8 Nov 1994 22:39:28 +0200 Wed, 16 Nov 1994 10:01:08 -0500 (EST) Wed, 2 Nov 1994 16:59:42 -0800 Wed, 9 Nov 94 10:00:23 PST Fri, 18 Nov 94 17:01:43 PST Mon, 14 Nov 1994 14:47:46 -0500 Mon, 21 Nov 1994 04:56:04 -0500 (EST) Mon, 21 Nov 1994 11:50:12 -0800 Sat, 5 Nov 1994 14:04:16 -0600 (CST) Sat, 05 Nov 94 13:10:13 MST Wed, 02 Nov 94 10:47:48 -0800 Wed, 02 Nov 94 13:19:15 -0800 Thu, 03 Nov 94 15:27:07 -0800 Fri, 04 Nov 94 09:12:12 -0800 Wed, 9 Nov 1994 10:13:03 +0000 (GMT) Wed, 9 Nov 1994 15:28:37 +0000 (GMT) Wed, 2 Nov 1994 17:37:41 +0100 (MET) 05 Nov 94 14:22:19 PST 16 Nov 94 22:28:20 PST Tue, 1 Nov 1994 19:51:15 -0800 Wed, 2 Nov 94 12:21:23 GMT Fri, 18 Nov 94 18:07:03 GMT Wed, 16 Nov 1994 11:26:27 -0500 Sun, 6 Nov 1994 13:48:49 -0500 Tue, 8 Nov 1994 13:19:37 -0800 Fri, 18 Nov 1994 11:01:12 -0800 Mon, 21 Nov 1994 00:47:58 -0500 Mon, 7 Nov 1994 14:22:48 -0800 (PST) Wed, 16 Nov 1994 15:56:45 -0800 (PST) Thu, 3 Nov 1994 13:17:47 +0000 Wed, 9 Nov 1994 17:32:50 -0500 (EST) Wed, 9 Nov 94 16:31:52 PST Wed, 09 Nov 94 10:41:10 -0800 Wed, 9 Nov 94 08:42:22 MST Mon, 14 Nov 1994 08:32:13 -0800 Mon, 14 Nov 1994 11:34:32 -0500 (EST) Mon, 14 Nov 94 16:48:09 GMT Tue, 15 Nov 1994 10:27:33 +0000 Wed, 02 Nov 94 13:56:54 MST Thu, 03 Nov 94 15:24:45 MST Thu, 3 Nov 1994 15:13:53 -0700 (MST) Fri, 04 Nov 94 08:15:13 MST Thu, 3 Nov 94 18:15:47 EST Tue, 08 Nov 94 07:02:33 MST Thu, 3 Nov 94 18:15:47 EST Tue, 15 Nov 94 07:26:05 MST Wed, 2 Nov 1994 00:00:55 -0600 (CST) Sun, 6 Nov 1994 01:19:13 -0600 (CST) Mon, 7 Nov 1994 23:16:57 -0600 (CST) Tue, 08 Nov 1994 13:21:21 -0600 Mon, 07 Nov 94 13:47:37 PST Tue, 08 Nov 94 11:23:19 PST Tue, 01 Nov 1994 11:28:25 -0800 Tue, 15 Nov 1994 13:11:47 -0800 Tue, 15 Nov 1994 13:18:38 -0800 Tue, 15 Nov 1994 0:18:38 -0800 10:00:00Z 10:00:00 10:00 10:00 +100 10:00 +0100 20020722T100000Z Jul 22 10:00:00 UTC 2002 2002-07-22 10:00:00Z 2002-07-22 10:00:00 Z 2002-07-22 10:00 Z 2002-07-22 10:00Z 2002-07-22 10:00 +100 2002-07-22 10:00 +0100 !; @data = split(/\n/, $data); print "1..", 1+@data,"\n"; print defined(str2time("")) ? "not ok 1\n" : "ok 1\n"; $loop = 2; foreach (@data) { my $pre_1970 = s/^-\s*//; if ($pre_1970 and $^O eq "MSWin32") { print "ok ",$loop++," # skip\n"; next; } $time = str2time($_); if(defined $time) { $time = int $time; $x = time2str("%a %b %e %T %Y %Z",$time,'GMT'); printf "%-40s\t%s\n", $_,$x,"\n"; $y = str2time($x); print "",($y == $time) ? "ok $loop\n" : "not ok $loop # $y != $time\n"; } else { print "not ok $loop # $_\n"; } $loop++; } TimeDate-2.30/t/format.t000644 000765 000765 00000004554 11502004123 015314 0ustar00gbarrgbarr000000 000000 use Test::More tests => 202; use Date::Format qw(ctime time2str); use Date::Language; use utf8; my ($pkg, $t,$language); $pkg = 'Date::Format::Generic'; while() { chomp; if (/^(\d+)/) { $t = $1; next; } elsif (/^(\w+)/) { $language = $1; $pkg = Date::Language->new($language); next; } my($fmt,$res) = split(/\t+/,$_); my $str = $pkg->time2str($fmt,$t,'GMT'); is($str, $res,"$fmt"); } __DATA__ 936709362 # Tue Sep 7 11:22:42 1999 GMT %y 99 %Y 1999 %% % %a Tue %A Tuesday %b Sep %B September %c 09/07/99 13:02:42 %C Tue Sep 7 13:02:42 GMT 1999 %d 07 %e 7 %D 09/07/99 %G 1026 %h Sep %H 13 %I 01 %j 250 %k 13 %l 1 %L 9 %m 09 %M 02 %o 7th %p PM %q 3 %r 01:02:42 PM %R 13:02 %s 936709362 %S 42 %T 13:02:42 %U 36 %w 2 %W 36 %x 09/07/99 %X 13:02:42 %y 99 %Y 1999 %Z GMT %z +0000 %Od VII %Oe VII %OH XIII %OI I %Oj CCL %Ok XIII %Ol I %Om IX %OM II %Oq III %OY MCMXCIX %Oy XCIX German %y 99 %Y 1999 %% % %a Die %A Dienstag %b Sep %B September %c 09/07/99 13:02:42 %C Die Sep 7 13:02:42 GMT 1999 %d 07 %e 7 %D 09/07/99 %h Sep %H 13 %I 01 %j 250 %k 13 %l 1 %L 9 %m 09 %M 02 %o 7. %p PM %q 3 %r 01:02:42 PM %R 13:02 %s 936709362 %S 42 %T 13:02:42 %U 36 %w 2 %W 36 %x 09/07/99 %X 13:02:42 %y 99 %Y 1999 %Z GMT %z +0000 %Od VII %Oe VII %OH XIII %OI I %Oj CCL %Ok XIII %Ol I %Om IX %OM II %Oq III %OY MCMXCIX %Oy XCIX Italian %y 99 %Y 1999 %% % %a Mar %A Martedi %b Set %B Settembre %c 09/07/99 13:02:42 %C Mar Set 7 13:02:42 GMT 1999 %d 07 %e 7 %D 09/07/99 %h Set %H 13 %I 01 %j 250 %k 13 %l 1 %L 9 %m 09 %M 02 %o 7th %p PM %q 3 %r 01:02:42 PM %R 13:02 %s 936709362 %S 42 %T 13:02:42 %U 36 %w 2 %W 36 %x 09/07/99 %X 13:02:42 %y 99 %Y 1999 %Z GMT %z +0000 %Od VII %Oe VII %OH XIII %OI I %Oj CCL %Ok XIII %Ol I %Om IX %OM II %Oq III %OY MCMXCIX %Oy XCIX 316648800 # Wed Jan 14 00:00:00 1980 %G 1 #0 is interpreted as empty string Bulgarian 1283926923 # ср сеп 8 09:22:03 EET 2010 /Tue Sep 06:22:03 GMT 2010 %y 10 %Y 2010 %% % %a ср %A сряда %b сеп %B септември %c 09/08/10 06:22:03 %C ср сеп 8 06:22:03 GMT 2010 %d 08 %e 8 %D 09/08/10 %G 1600 %h сеп %H 06 %I 06 %j 251 %k 6 %l 6 %L 9 %m 09 %M 22 %o 8ми %p AM %q 3 %r 06:22:03 AM %R 06:22 %s 1283926923 %S 03 %T 06:22:03 %U 36 %w 3 %W 36 %x 09/08/10 %X 06:22:03 %Z GMT %z +0000 %z +0000 %Od VIII %Oe VIII %OH VI %OI VI %Oj CCLI %Ok VI %Ol VI %Om IX %OM XXII %Oq III %OY MMX %Oy X TimeDate-2.30/t/getdate.t000644 000765 000765 00000017657 11310706316 015463 0ustar00gbarrgbarr000000 000000 #!/usr/local/bin/perl -w #Thanks to Andreas Koenig for converting all those dates to numbers #and adding the folloing acknowledgement into Date/t/getdate.t #Thanks to Graham Barr for writing these tests. Slightly adjusted for #the C version by Andreas Koenig, 96-06-08. use Date::Parse; $data = qq!1995-01-24 ;790905600 1995-06-24 ;803952000 92/01/02 12:01 ;694353660 92/01/02 12:01 AM ;694310460 92/01/02 12:01 PM ;694353660 2002-11-02 11pm GMT ;1036278000 2002-11-02 11 pm GMT ;1036278000 1995-01-24 GMT ;790905600 1995-01-24 BST ;790902000 1995-06-24 GMT ;803952000 1995-06-24 BST ;803948400 1992-1-2 12:01 GMT ;694353660 1992-1-2-12:01:00 GMT ;694353660 Wed, 16 Jun 94 07:29:35 CST ;771773375 Wed,16 Jun 94 07:29:35 CST ;771773375 Wed, 16 Nov 94 07:29:35 CST ;784992575 Mon, 21 Nov 94 07:42:23 CST ;785425343 Mon, 21 Nov 94 04:28:18 CST ;785413698 Tue, 15 Nov 94 09:15:10 GMT ;784890910 Wed, 16 Nov 94 09:39:49 GMT ;784978789 Wed, 16 Nov 94 09:23:17 GMT ;784977797 Wed, 16 Nov 94 12:39:49 GMT ;784989589 Wed, 16 Nov 94 14:03:06 GMT ;784994586 Wed, 16 Nov 94 05:30:51 CST ;784985451 Thu, 17 Nov 94 03:19:30 CST ;785063970 1994:11:21T14:05:32+0000 ;785426732 Mon, 21 Nov 94 14:05:32 GMT ;785426732 Mon, 14 Nov 94 15:08:49 CST ;784847329 Wed, 16 Nov 94 14:48:06 GMT ;784997286 Thu, 17 Nov 94 14:22:03 GMT ;785082123 Wed, 16 Nov 94 14:36:00 GMT ;784996560 Wed, 16 Nov 94 09:23:17 GMT ;784977797 Wed, 16 Nov 94 10:01:43 GMT ;784980103 Wed, 16 Nov 94 15:03:35 GMT ;784998215 Mon, 21 Nov 94 13:55:19 GMT ;785426119 Wed, 16 Nov 94 08:46:11 CST ;784997171 Wed, 9 Nov 1994 09:50:32 -0500 (EST) ;784392632 Thu, 13 Oct 94 10:13:13 -0700 ;782068393 Sat, 19 Nov 1994 16:59:14 +0100 ;785260754 Thu, 3 Nov 94 14:10:47 EST ;783889847 Thu, 3 Nov 94 21:51:09 EST ;783917469 Fri, 4 Nov 94 9:24:52 EST ;783959092 Wed, 9 Nov 94 09:38:54 EST ;784391934 Mon, 14 Nov 94 13:20:12 EST ;784837212 Wed, 16 Nov 94 17:09:13 EST ;785023753 Tue, 15 Nov 94 12:27:01 PST ;784931221 Fri, 18 Nov 1994 07:34:05 -0600 ;785165645 Mon, 21 Nov 94 14:34:28 -0500 ;785446468 Fri, 18 Nov 1994 12:05:47 -0800 (PST);785189147 Fri, 18 Nov 1994 12:36:26 -0800 (PST);785190986 Wed, 16 Nov 1994 15:58:58 GMT ;785001538 Sun, 06 Nov 94 14:27:40 -0500 ;784150060 Mon, 07 Nov 94 08:20:13 -0500 ;784214413 Mon, 07 Nov 94 16:48:42 -0500 ;784244922 Wed, 09 Nov 94 15:46:16 -0500 ;784413976 Sun, 6 Nov 1994 02:38:17 -0800 ;784118297 Tue, 1 Nov 1994 13:53:49 -0500 ;783716029 Tue, 15 Nov 94 08:31:59 +0100 ;784884719 Sun, 6 Nov 1994 11:09:12 -0500 (IST) ;784138152 Fri, 4 Nov 94 12:52:10 EST ;783971530 Mon, 31 Oct 1994 14:17:39 -0500 (EST);783631059 Mon, 14 Nov 94 11:25:00 CST ;784833900 Mon, 14 Nov 94 13:26:29 CST ;784841189 Fri, 18 Nov 94 8:42:47 CST ;785169767 Thu, 17 Nov 94 14:32:01 +0900 ;785050321 Wed, 2 Nov 94 18:16:31 +0100 ;783796591 Fri, 18 Nov 94 10:46:26 +0100 ;785151986 Tue, 8 Nov 1994 22:39:28 +0200 ;784327168 Wed, 16 Nov 1994 10:01:08 -0500 (EST);784998068 Wed, 2 Nov 1994 16:59:42 -0800 ;783824382 Wed, 9 Nov 94 10:00:23 PST ;784404023 Fri, 18 Nov 94 17:01:43 PST ;785206903 Mon, 14 Nov 1994 14:47:46 -0500 ;784842466 Mon, 21 Nov 1994 04:56:04 -0500 (EST);785411764 Mon, 21 Nov 1994 11:50:12 -0800 ;785447412 Sat, 5 Nov 1994 14:04:16 -0600 (CST) ;784065856 Sat, 05 Nov 94 13:10:13 MST ;784066213 Wed, 02 Nov 94 10:47:48 -0800 ;783802068 Wed, 02 Nov 94 13:19:15 -0800 ;783811155 Thu, 03 Nov 94 15:27:07 -0800 ;783905227 Fri, 04 Nov 94 09:12:12 -0800 ;783969132 Wed, 9 Nov 1994 10:13:03 +0000 (GMT) ;784375983 Wed, 9 Nov 1994 15:28:37 +0000 (GMT) ;784394917 Wed, 2 Nov 1994 17:37:41 +0100 (MET) ;783794261 05 Nov 94 14:22:19 PST ;784074139 16 Nov 94 22:28:20 PST ;785053700 Tue, 1 Nov 1994 19:51:15 -0800 ;783748275 Wed, 2 Nov 94 12:21:23 GMT ;783778883 Fri, 18 Nov 94 18:07:03 GMT ;785182023 Wed, 16 Nov 1994 11:26:27 -0500 ;785003187 Sun, 6 Nov 1994 13:48:49 -0500 ;784147729 Tue, 8 Nov 1994 13:19:37 -0800 ;784329577 Fri, 18 Nov 1994 11:01:12 -0800 ;785185272 Mon, 21 Nov 1994 00:47:58 -0500 ;785396878 Mon, 7 Nov 1994 14:22:48 -0800 (PST) ;784246968 Wed, 16 Nov 1994 15:56:45 -0800 (PST);785030205 Thu, 3 Nov 1994 13:17:47 +0000 ;783868667 Wed, 9 Nov 1994 17:32:50 -0500 (EST) ;784420370 Wed, 9 Nov 94 16:31:52 PST ;784427512 Wed, 09 Nov 94 10:41:10 -0800 ;784406470 Wed, 9 Nov 94 08:42:22 MST ;784395742 Mon, 14 Nov 1994 08:32:13 -0800 ;784830733 Mon, 14 Nov 1994 11:34:32 -0500 (EST);784830872 Mon, 14 Nov 94 16:48:09 GMT ;784831689 Tue, 15 Nov 1994 10:27:33 +0000 ;784895253 Wed, 02 Nov 94 13:56:54 MST ;783809814 Thu, 03 Nov 94 15:24:45 MST ;783901485 Thu, 3 Nov 1994 15:13:53 -0700 (MST) ;783900833 Fri, 04 Nov 94 08:15:13 MST ;783962113 Thu, 3 Nov 94 18:15:47 EST ;783904547 Tue, 08 Nov 94 07:02:33 MST ;784303353 Thu, 3 Nov 94 18:15:47 EST ;783904547 Tue, 15 Nov 94 07:26:05 MST ;784909565 Wed, 2 Nov 1994 00:00:55 -0600 (CST) ;783756055 Sun, 6 Nov 1994 01:19:13 -0600 (CST) ;784106353 Mon, 7 Nov 1994 23:16:57 -0600 (CST) ;784271817 Tue, 08 Nov 1994 13:21:21 -0600 ;784322481 Mon, 07 Nov 94 13:47:37 PST ;784244857 Tue, 08 Nov 94 11:23:19 PST ;784322599 Tue, 01 Nov 1994 11:28:25 -0800 ;783718105 Tue, 15 Nov 1994 13:11:47 -0800 ;784933907 Tue, 15 Nov 1994 13:18:38 -0800 ;784934318 Tue, 15 Nov 1994 0:18:38 -0800 ;784887518 Jul 13 1999 1:23P GMT ;931872180 Jul 13 1999 1:23P.M GMT ;931872180 Jul 13 1999 1:23P.M. GMT ;931872180 Jul-13-1999 1:23P.M GMT ;931872180 Jul/13/1999 1:23P.M. GMT ;931872180 2001-02-26T13:44:12-0700 ;983220252 2001-02-26T13:44-0700 ;983220240 2001-02-26T13-0700 ;983217600 2001-02-26T13-44-12-0700 ;983220252 2001-02-26T13-44-0700 ;983220240 2001-02-26T13-0700 ;983217600 07/Nov/2000:16:45:56 +0100 ;973611956 2002-11-07T23:31:49-05:00 ;1036729909 2003-02-17T07:45:56Z ;1045467956 2003-02-17T08:14:07.198189+0000 ;1045469647.198189 20020722T100000Z ;1027332000 Jul 22 10:00:00 UTC 2002 ;1027332000 2002-07-22 10:00:00Z ;1027332000 2002-07-22 10:00:00 Z ;1027332000 2002-07-22 10:00 Z ;1027332000 2002-07-22 10:00Z ;1027332000 2002-07-22 10:00 +100 ;1027328400 2002-07-22 10:00 +0100 ;1027328400 !; require Time::Local; my $offset = Time::Local::timegm(0,0,0,1,0,70); @data = split(/\n/, $data); print "1..", scalar(@data),"\n"; $loop = 1; printf "# offset = %d\n", $offset; foreach (@data){ my($str,$time_expect) = split ';', $_; my $time = Date::Parse::str2time($str); if($loop < 6) { # The first five tests are parsed in the current time zone # But the check number is in GMT my @lt = localtime($time_expect); my @gt = gmtime($time_expect); $tzsec = ($gt[1] - $lt[1]) * 60 + ($gt[2] - $lt[2]) * 3600; my($lday,$gday) = ($lt[7],$gt[7]); if($lt[5] > $gt[5]) { $tzsec -= 24 * 3600; } elsif($gt[5] > $lt[5]) { $tzsec += 24 * 3600; } else { $tzsec += ($gt[7] - $lt[7]) * (24 * 3600); } $time -= $tzsec; } $time_expect += $offset; if(defined($time) and $time==$time_expect) { print "ok $loop\n"; } else { require Date::Format; print "-"x50,"\nFAIL $loop\n"; printf "%s\nDiff: %d\n", $str, $time - $time_expect; printf "Expect: %10f %s",$time_expect,Date::Format::ctime($time_expect); printf "Got: %10f %s",$time, Date::Format::ctime($time); } $loop++; } TimeDate-2.30/t/lang.t000644 000765 000765 00000000534 11502004123 014737 0ustar00gbarrgbarr000000 000000 #!/usr/local/bin/perl -w use Date::Language; my $time = time; my $v; my @lang = qw(English German Italian Bulgarian); print "1..", scalar(@lang),"\n"; my $loop = 1; my $lang; foreach $lang (@lang) { my $l = Date::Language->new($lang); $v = $l->str2time($l->ctime($time)); print $v == $time ? "ok $loop\n" : "FAIL $loop\n"; $loop++; } TimeDate-2.30/lib/Date/000755 000765 000765 00000000000 12110501140 015004 5ustar00gbarrgbarr000000 000000 TimeDate-2.30/lib/Time/000755 000765 000765 00000000000 12110501140 015025 5ustar00gbarrgbarr000000 000000 TimeDate-2.30/lib/Time/Zone.pm000644 000765 000765 00000020232 11310706316 016312 0ustar00gbarrgbarr000000 000000 package Time::Zone; =head1 NAME Time::Zone -- miscellaneous timezone manipulations routines =head1 SYNOPSIS use Time::Zone; print tz2zone(); print tz2zone($ENV{'TZ'}); print tz2zone($ENV{'TZ'}, time()); print tz2zone($ENV{'TZ'}, undef, $isdst); $offset = tz_local_offset(); $offset = tz_offset($TZ); =head1 DESCRIPTION This is a collection of miscellaneous timezone manipulation routines. C parses the TZ environment variable and returns a timezone string suitable for inclusion in L-like output. It opionally takes a timezone string, a time, and a is-dst flag. C determins the offset from GMT time in seconds. It only does the calculation once. C determines the offset from GMT in seconds of a specified timezone. C determines the name of the timezone based on its offset =head1 AUTHORS Graham Barr David Muir Sharnoff Paul Foley =cut require 5.002; require Exporter; use Carp; use strict; use vars qw(@ISA @EXPORT $VERSION @tz_local); @ISA = qw(Exporter); @EXPORT = qw(tz2zone tz_local_offset tz_offset tz_name); $VERSION = "2.24"; # Parts stolen from code by Paul Foley sub tz2zone (;$$$) { my($TZ, $time, $isdst) = @_; use vars qw(%tzn_cache); $TZ = defined($ENV{'TZ'}) ? ( $ENV{'TZ'} ? $ENV{'TZ'} : 'GMT' ) : '' unless $TZ; # Hack to deal with 'PST8PDT' format of TZ # Note that this can't deal with all the esoteric forms, but it # does recognize the most common: [:]STDoff[DST[off][,rule]] if (! defined $isdst) { my $j; $time = time() unless $time; ($j, $j, $j, $j, $j, $j, $j, $j, $isdst) = localtime($time); } if (defined $tzn_cache{$TZ}->[$isdst]) { return $tzn_cache{$TZ}->[$isdst]; } if ($TZ =~ /^ ( [^:\d+\-,] {3,} ) ( [+-] ? \d {1,2} ( : \d {1,2} ) {0,2} ) ( [^\d+\-,] {3,} )? /x ) { my $dsttz = defined($4) ? $4 : $1; $TZ = $isdst ? $dsttz : $1; $tzn_cache{$TZ} = [ $1, $dsttz ]; } else { $tzn_cache{$TZ} = [ $TZ, $TZ ]; } return $TZ; } sub tz_local_offset (;$) { my ($time) = @_; $time = time() unless $time; my (@l) = localtime($time); my $isdst = $l[8]; if (defined($tz_local[$isdst])) { return $tz_local[$isdst]; } $tz_local[$isdst] = &calc_off($time); return $tz_local[$isdst]; } sub calc_off { my ($time) = @_; my (@l) = localtime($time); my (@g) = gmtime($time); my $off; $off = $l[0] - $g[0] + ($l[1] - $g[1]) * 60 + ($l[2] - $g[2]) * 3600; # subscript 7 is yday. if ($l[7] == $g[7]) { # done } elsif ($l[7] == $g[7] + 1) { $off += 86400; } elsif ($l[7] == $g[7] - 1) { $off -= 86400; } elsif ($l[7] < $g[7]) { # crossed over a year boundry! # localtime is beginning of year, gmt is end # therefore local is ahead $off += 86400; } else { $off -= 86400; } return $off; } # constants CONFIG: { use vars qw(%dstZone %zoneOff %dstZoneOff %Zone); my @dstZone = ( # "ndt" => -2*3600-1800, # Newfoundland Daylight "brst" => -2*3600, # Brazil Summer Time (East Daylight) "adt" => -3*3600, # Atlantic Daylight "edt" => -4*3600, # Eastern Daylight "cdt" => -5*3600, # Central Daylight "mdt" => -6*3600, # Mountain Daylight "pdt" => -7*3600, # Pacific Daylight "akdt" => -8*3600, # Alaska Daylight "ydt" => -8*3600, # Yukon Daylight "hdt" => -9*3600, # Hawaii Daylight "bst" => +1*3600, # British Summer "mest" => +2*3600, # Middle European Summer "metdst" => +2*3600, # Middle European DST "sst" => +2*3600, # Swedish Summer "fst" => +2*3600, # French Summer "cest" => +2*3600, # Central European Daylight "eest" => +3*3600, # Eastern European Summer "msd" => +4*3600, # Moscow Daylight "wadt" => +8*3600, # West Australian Daylight "kdt" => +10*3600, # Korean Daylight # "cadt" => +10*3600+1800, # Central Australian Daylight "aedt" => +11*3600, # Eastern Australian Daylight "eadt" => +11*3600, # Eastern Australian Daylight "nzd" => +13*3600, # New Zealand Daylight "nzdt" => +13*3600, # New Zealand Daylight ); my @Zone = ( "gmt" => 0, # Greenwich Mean "ut" => 0, # Universal (Coordinated) "utc" => 0, "wet" => 0, # Western European "wat" => -1*3600, # West Africa "at" => -2*3600, # Azores "fnt" => -2*3600, # Brazil Time (Extreme East - Fernando Noronha) "brt" => -3*3600, # Brazil Time (East Standard - Brasilia) # For completeness. BST is also British Summer, and GST is also Guam Standard. # "bst" => -3*3600, # Brazil Standard # "gst" => -3*3600, # Greenland Standard # "nft" => -3*3600-1800,# Newfoundland # "nst" => -3*3600-1800,# Newfoundland Standard "mnt" => -4*3600, # Brazil Time (West Standard - Manaus) "ewt" => -4*3600, # U.S. Eastern War Time "ast" => -4*3600, # Atlantic Standard "est" => -5*3600, # Eastern Standard "act" => -5*3600, # Brazil Time (Extreme West - Acre) "cst" => -6*3600, # Central Standard "mst" => -7*3600, # Mountain Standard "pst" => -8*3600, # Pacific Standard "akst" => -9*3600, # Alaska Standard "yst" => -9*3600, # Yukon Standard "hst" => -10*3600, # Hawaii Standard "cat" => -10*3600, # Central Alaska "ahst" => -10*3600, # Alaska-Hawaii Standard "nt" => -11*3600, # Nome "idlw" => -12*3600, # International Date Line West "cet" => +1*3600, # Central European "mez" => +1*3600, # Central European (German) "ect" => +1*3600, # Central European (French) "met" => +1*3600, # Middle European "mewt" => +1*3600, # Middle European Winter "swt" => +1*3600, # Swedish Winter "set" => +1*3600, # Seychelles "fwt" => +1*3600, # French Winter "eet" => +2*3600, # Eastern Europe, USSR Zone 1 "ukr" => +2*3600, # Ukraine "bt" => +3*3600, # Baghdad, USSR Zone 2 "msk" => +3*3600, # Moscow # "it" => +3*3600+1800,# Iran "zp4" => +4*3600, # USSR Zone 3 "zp5" => +5*3600, # USSR Zone 4 # "ist" => +5*3600+1800,# Indian Standard "zp6" => +6*3600, # USSR Zone 5 # For completeness. NST is also Newfoundland Stanard, and SST is also Swedish Summer. # "nst" => +6*3600+1800,# North Sumatra # "sst" => +7*3600, # South Sumatra, USSR Zone 6 # "jt" => +7*3600+1800,# Java (3pm in Cronusland!) "wst" => +8*3600, # West Australian Standard "hkt" => +8*3600, # Hong Kong "cct" => +8*3600, # China Coast, USSR Zone 7 "jst" => +9*3600, # Japan Standard, USSR Zone 8 "kst" => +9*3600, # Korean Standard # "cast" => +9*3600+1800,# Central Australian Standard "aest" => +10*3600, # Eastern Australian Standard "east" => +10*3600, # Eastern Australian Standard "gst" => +10*3600, # Guam Standard, USSR Zone 9 "nzt" => +12*3600, # New Zealand "nzst" => +12*3600, # New Zealand Standard "idle" => +12*3600, # International Date Line East ); %Zone = @Zone; %dstZone = @dstZone; %zoneOff = reverse(@Zone); %dstZoneOff = reverse(@dstZone); } sub tz_offset (;$$) { my ($zone, $time) = @_; return &tz_local_offset($time) unless($zone); $time = time() unless $time; my(@l) = localtime($time); my $dst = $l[8]; $zone = lc $zone; if($zone =~ /^(([\-\+])\d\d?)(\d\d)$/) { my $v = $2 . $3; return $1 * 3600 + $v * 60; } elsif (exists $dstZone{$zone} && ($dst || !exists $Zone{$zone})) { return $dstZone{$zone}; } elsif(exists $Zone{$zone}) { return $Zone{$zone}; } undef; } sub tz_name (;$$) { my ($off, $dst) = @_; $off = tz_offset() unless(defined $off); $dst = (localtime(time))[8] unless(defined $dst); if (exists $dstZoneOff{$off} && ($dst || !exists $zoneOff{$off})) { return $dstZoneOff{$off}; } elsif (exists $zoneOff{$off}) { return $zoneOff{$off}; } sprintf("%+05d", int($off / 60) * 100 + $off % 60); } 1; TimeDate-2.30/lib/Date/Format.pm000644 000765 000765 00000022660 11310706316 016615 0ustar00gbarrgbarr000000 000000 # Copyright (c) 1995-2009 Graham Barr. This program is free # software; you can redistribute it and/or modify it under the same terms # as Perl itself. package Date::Format; use strict; use vars qw(@EXPORT @ISA $VERSION); require Exporter; $VERSION = "2.24"; @ISA = qw(Exporter); @EXPORT = qw(time2str strftime ctime asctime); sub time2str ($;$$) { Date::Format::Generic->time2str(@_); } sub strftime ($\@;$) { Date::Format::Generic->strftime(@_); } sub ctime ($;$) { my($t,$tz) = @_; Date::Format::Generic->time2str("%a %b %e %T %Y\n", $t, $tz); } sub asctime (\@;$) { my($t,$tz) = @_; Date::Format::Generic->strftime("%a %b %e %T %Y\n", $t, $tz); } ## ## ## package Date::Format::Generic; use vars qw($epoch $tzname); use Time::Zone; use Time::Local; sub ctime { my($me,$t,$tz) = @_; $me->time2str("%a %b %e %T %Y\n", $t, $tz); } sub asctime { my($me,$t,$tz) = @_; $me->strftime("%a %b %e %T %Y\n", $t, $tz); } sub _subs { my $fn; $_[1] =~ s/ %(O?[%a-zA-Z]) / ($_[0]->can("format_$1") || sub { $1 })->($_[0]); /sgeox; $_[1]; } sub strftime { my($pkg,$fmt,$time); ($pkg,$fmt,$time,$tzname) = @_; my $me = ref($pkg) ? $pkg : bless []; if(defined $tzname) { $tzname = uc $tzname; $tzname = sprintf("%+05d",$tzname) unless($tzname =~ /\D/); $epoch = timegm(@{$time}[0..5]); @$me = gmtime($epoch + tz_offset($tzname) - tz_offset()); } else { @$me = @$time; undef $epoch; } _subs($me,$fmt); } sub time2str { my($pkg,$fmt,$time); ($pkg,$fmt,$time,$tzname) = @_; my $me = ref($pkg) ? $pkg : bless [], $pkg; $epoch = $time; if(defined $tzname) { $tzname = uc $tzname; $tzname = sprintf("%+05d",$tzname) unless($tzname =~ /\D/); $time += tz_offset($tzname); @$me = gmtime($time); } else { @$me = localtime($time); } $me->[9] = $time; _subs($me,$fmt); } my(@DoW,@MoY,@DoWs,@MoYs,@AMPM,%format,@Dsuf); @DoW = qw(Sunday Monday Tuesday Wednesday Thursday Friday Saturday); @MoY = qw(January February March April May June July August September October November December); @DoWs = map { substr($_,0,3) } @DoW; @MoYs = map { substr($_,0,3) } @MoY; @AMPM = qw(AM PM); @Dsuf = (qw(th st nd rd th th th th th th)) x 3; @Dsuf[11,12,13] = qw(th th th); @Dsuf[30,31] = qw(th st); %format = ('x' => "%m/%d/%y", 'C' => "%a %b %e %T %Z %Y", 'X' => "%H:%M:%S", ); my @locale; my $locale = "/usr/share/lib/locale/LC_TIME/default"; local *LOCALE; if(open(LOCALE,"$locale")) { chop(@locale = ); close(LOCALE); @MoYs = @locale[0 .. 11]; @MoY = @locale[12 .. 23]; @DoWs = @locale[24 .. 30]; @DoW = @locale[31 .. 37]; @format{"X","x","C"} = @locale[38 .. 40]; @AMPM = @locale[41 .. 42]; } sub wkyr { my($wstart, $wday, $yday) = @_; $wday = ($wday + 7 - $wstart) % 7; return int(($yday - $wday + 13) / 7 - 1); } ## ## these 6 formatting routins need to be *copied* into the language ## specific packages ## my @roman = ('',qw(I II III IV V VI VII VIII IX)); sub roman { my $n = shift; $n =~ s/(\d)$//; my $r = $roman[ $1 ]; if($n =~ s/(\d)$//) { (my $t = $roman[$1]) =~ tr/IVX/XLC/; $r = $t . $r; } if($n =~ s/(\d)$//) { (my $t = $roman[$1]) =~ tr/IVX/CDM/; $r = $t . $r; } if($n =~ s/(\d)$//) { (my $t = $roman[$1]) =~ tr/IVX/M../; $r = $t . $r; } $r; } sub format_a { $DoWs[$_[0]->[6]] } sub format_A { $DoW[$_[0]->[6]] } sub format_b { $MoYs[$_[0]->[4]] } sub format_B { $MoY[$_[0]->[4]] } sub format_h { $MoYs[$_[0]->[4]] } sub format_p { $_[0]->[2] >= 12 ? $AMPM[1] : $AMPM[0] } sub format_P { lc($_[0]->[2] >= 12 ? $AMPM[1] : $AMPM[0]) } sub format_d { sprintf("%02d",$_[0]->[3]) } sub format_e { sprintf("%2d",$_[0]->[3]) } sub format_H { sprintf("%02d",$_[0]->[2]) } sub format_I { sprintf("%02d",$_[0]->[2] % 12 || 12)} sub format_j { sprintf("%03d",$_[0]->[7] + 1) } sub format_k { sprintf("%2d",$_[0]->[2]) } sub format_l { sprintf("%2d",$_[0]->[2] % 12 || 12)} sub format_L { $_[0]->[4] + 1 } sub format_m { sprintf("%02d",$_[0]->[4] + 1) } sub format_M { sprintf("%02d",$_[0]->[1]) } sub format_q { sprintf("%01d",int($_[0]->[4] / 3) + 1) } sub format_s { $epoch = timelocal(@{$_[0]}[0..5]) unless defined $epoch; sprintf("%d",$epoch) } sub format_S { sprintf("%02d",$_[0]->[0]) } sub format_U { wkyr(0, $_[0]->[6], $_[0]->[7]) } sub format_w { $_[0]->[6] } sub format_W { wkyr(1, $_[0]->[6], $_[0]->[7]) } sub format_y { sprintf("%02d",$_[0]->[5] % 100) } sub format_Y { sprintf("%04d",$_[0]->[5] + 1900) } sub format_Z { my $o = tz_local_offset(timelocal(@{$_[0]}[0..5])); defined $tzname ? $tzname : uc tz_name($o, $_[0]->[8]); } sub format_z { my $t = timelocal(@{$_[0]}[0..5]); my $o = defined $tzname ? tz_offset($tzname, $t) : tz_offset(undef,$t); sprintf("%+03d%02d", int($o / 3600), int(abs($o) % 3600) / 60); } sub format_c { &format_x . " " . &format_X } sub format_D { &format_m . "/" . &format_d . "/" . &format_y } sub format_r { &format_I . ":" . &format_M . ":" . &format_S . " " . &format_p } sub format_R { &format_H . ":" . &format_M } sub format_T { &format_H . ":" . &format_M . ":" . &format_S } sub format_t { "\t" } sub format_n { "\n" } sub format_o { sprintf("%2d%s",$_[0]->[3],$Dsuf[$_[0]->[3]]) } sub format_x { my $f = $format{'x'}; _subs($_[0],$f); } sub format_X { my $f = $format{'X'}; _subs($_[0],$f); } sub format_C { my $f = $format{'C'}; _subs($_[0],$f); } sub format_Od { roman(format_d(@_)) } sub format_Oe { roman(format_e(@_)) } sub format_OH { roman(format_H(@_)) } sub format_OI { roman(format_I(@_)) } sub format_Oj { roman(format_j(@_)) } sub format_Ok { roman(format_k(@_)) } sub format_Ol { roman(format_l(@_)) } sub format_Om { roman(format_m(@_)) } sub format_OM { roman(format_M(@_)) } sub format_Oq { roman(format_q(@_)) } sub format_Oy { roman(format_y(@_)) } sub format_OY { roman(format_Y(@_)) } sub format_G { int(($_[0]->[9] - 315993600) / 604800) } 1; __END__ =head1 NAME Date::Format - Date formating subroutines =head1 SYNOPSIS use Date::Format; @lt = localtime(time); print time2str($template, time); print strftime($template, @lt); print time2str($template, time, $zone); print strftime($template, @lt, $zone); print ctime(time); print asctime(@lt); print ctime(time, $zone); print asctime(@lt, $zone); =head1 DESCRIPTION This module provides routines to format dates into ASCII strings. They correspond to the C library routines C and C. =over 4 =item time2str(TEMPLATE, TIME [, ZONE]) C converts C