[svn-upgrade] Integrating new upstream version, libtimedate-perl (1.1900)
Jonathan Yu
14 years ago
0 | 1.19 -- Fri Sep 25 13:59:41 CDT 2009 | |
1 | ||
2 | * Replace Date::Language::Hungarian with version from CPAN by Lee Goddard | |
3 | ||
4 | 1.18 -- Thu Sep 24 17:43:28 CDT 2009 | |
5 | ||
6 | * RT#49963 Skip pre 1970 date tests on Win32 | |
7 | * Added Date::Language::Hungarian (Konrad Lorinczi) | |
8 | ||
9 | 1.17 -- Sat Sep 19 10:56:12 CDT 2009 | |
10 | ||
11 | Bugfixes | |
12 | * RT#45067: Date::Format with %z gives wrong results for half-hour timezones (Ernesto Hernández-Novich) | |
13 | * RT#48164: Date::Parse unable to set seconds correctly | |
14 | * RT#17396: Parse error for french date with 'mars' (march) as month | |
15 | ||
16 | Documentation | |
17 | * Fixed documentation for %e in Date::Format | |
18 | * Update documentation to remove Date::Format->language | |
19 | ||
20 | Enhancements | |
21 | * Add support for dates like Jul-13-1999 (Brett Warden) | |
22 | * Added Icelandic language (Tomas Edwardsson) | |
23 | * Added Romanian language (Doru Petrescu) | |
24 | * Added Russian language (Denis Poznyakov & Danil Pismenny) | |
25 | * Added Turkish language (Burak Gursoy) | |
26 | * Added Spanish language (Adrian Mugnolo) | |
27 | * Added Chinese language (Kang-min Liu) | |
28 | * Support parsing dates like 2002-02-26-10:37:21.141 as used by lpd | |
29 | * Support Z timezone when only the time is specified | |
30 | * Added METDST to Time::Zone | |
31 | * Added AKST/AKDT to Time::Zone | |
32 | ||
33 | Changes prior to 1.17 | |
34 | ||
0 | 35 | Change 814 on 2003/06/03 by <gbarr@pobox.com> (Graham Barr) |
1 | 36 | |
2 | 37 | Date::Parse |
0 | 0 | ChangeLog |
1 | MANIFEST | |
2 | Makefile.PL | |
3 | README | |
4 | 1 | lib/Date/Format.pm |
5 | 2 | lib/Date/Language.pm |
6 | 3 | lib/Date/Language/Afar.pm |
7 | 4 | lib/Date/Language/Amharic.pm |
8 | 5 | lib/Date/Language/Austrian.pm |
9 | 6 | lib/Date/Language/Brazilian.pm |
7 | lib/Date/Language/Chinese.pm | |
10 | 8 | lib/Date/Language/Chinese_GB.pm |
11 | 9 | lib/Date/Language/Czech.pm |
12 | 10 | lib/Date/Language/Danish.pm |
17 | 15 | lib/Date/Language/Gedeo.pm |
18 | 16 | lib/Date/Language/German.pm |
19 | 17 | lib/Date/Language/Greek.pm |
18 | lib/Date/Language/Hungarian.pm | |
19 | lib/Date/Language/Icelandic.pm | |
20 | 20 | lib/Date/Language/Italian.pm |
21 | 21 | lib/Date/Language/Norwegian.pm |
22 | 22 | lib/Date/Language/Oromo.pm |
23 | lib/Date/Language/Romanian.pm | |
24 | lib/Date/Language/Russian.pm | |
25 | lib/Date/Language/Russian_cp1251.pm | |
26 | lib/Date/Language/Russian_koi8r.pm | |
23 | 27 | lib/Date/Language/Sidama.pm |
24 | 28 | lib/Date/Language/Somali.pm |
29 | lib/Date/Language/Spanish.pm | |
25 | 30 | lib/Date/Language/Swedish.pm |
26 | 31 | lib/Date/Language/Tigrinya.pm |
27 | 32 | lib/Date/Language/TigrinyaEritrean.pm |
28 | 33 | lib/Date/Language/TigrinyaEthiopian.pm |
34 | lib/Date/Language/Turkish.pm | |
29 | 35 | lib/Date/Parse.pm |
30 | 36 | lib/Time/Zone.pm |
37 | Makefile.PL | |
38 | MANIFEST | |
39 | README | |
40 | t/cpanrt.t | |
31 | 41 | t/date.t |
32 | 42 | t/format.t |
33 | 43 | t/getdate.t |
34 | 44 | t/lang.t |
45 | META.yml Module meta-data (added by MakeMaker) | |
46 | SIGNATURE Public-key signature (added by MakeMaker) |
0 | --- #YAML:1.0 | |
1 | name: TimeDate | |
2 | version: 1.19 | |
3 | abstract: ~ | |
4 | author: | |
5 | - Graham Barr <gbarr@pobox.com> | |
6 | license: perl | |
7 | distribution_type: module | |
8 | configure_requires: | |
9 | ExtUtils::MakeMaker: 0 | |
10 | requires: {} | |
11 | resources: | |
12 | repository: http://github.com/gbarr/perl-TimeDate | |
13 | no_index: | |
14 | directory: | |
15 | - t | |
16 | - inc | |
17 | generated_by: ExtUtils::MakeMaker version 6.48 | |
18 | meta-spec: | |
19 | url: http://module-build.sourceforge.net/META-spec-v1.4.html | |
20 | version: 1.4 |
0 | 0 | # This -*- perl -*- script makes the Makefile |
1 | # $Id: //depot/TimeDate/Makefile.PL#11 $ | |
2 | ||
3 | #--- Distribution section --- | |
4 | ||
5 | $DISTNAME = 'TimeDate'; | |
6 | $VERSION = "1.16"; | |
7 | ||
8 | #--- Write the Makefile | |
9 | 1 | |
10 | 2 | BEGIN { require 5.004 } |
11 | 3 | |
4 | use strict; | |
5 | use warnings; | |
12 | 6 | use ExtUtils::MakeMaker; |
13 | 7 | |
14 | 8 | WriteMakefile( |
15 | VERSION => $VERSION, | |
16 | NAME => $DISTNAME, | |
9 | NAME => 'TimeDate', | |
10 | AUTHOR => 'Graham Barr <gbarr@pobox.com>', | |
11 | VERSION => '1.19', | |
12 | (eval { ExtUtils::MakeMaker->VERSION(6.21) } ? (LICENSE => 'perl') : ()), | |
13 | ( eval { ExtUtils::MakeMaker->VERSION(6.46) } ? ( | |
14 | META_MERGE => { | |
15 | resources => { ## | |
16 | repository => 'http://github.com/gbarr/perl-TimeDate', | |
17 | }, | |
18 | } | |
19 | ) | |
20 | : () | |
21 | ), | |
17 | 22 | ); |
18 | ||
19 |
17 | 17 | |
18 | 18 | Please report any bugs/suggestions to <gbarr@pobox.com> |
19 | 19 | |
20 | Copyright 1996-2000 Graham Barr. All rights reserved. | |
20 | Copyright 1995-2009 Graham Barr. | |
21 | 21 | |
22 | 22 | This library is free software; you can redistribute it and/or modify |
23 | 23 | it under the same terms as Perl itself. |
0 | This file contains message digests of all files listed in MANIFEST, | |
1 | signed via the Module::Signature module, version 0.55. | |
2 | ||
3 | To verify the content in this distribution, first make sure you have | |
4 | Module::Signature installed, then type: | |
5 | ||
6 | % cpansign -v | |
7 | ||
8 | It will check each file's integrity, as well as the signature's | |
9 | validity. If "==> Signature verified OK! <==" is not displayed, | |
10 | the distribution may already have been compromised, and you should | |
11 | not run its Makefile.PL or Build.PL. | |
12 | ||
13 | -----BEGIN PGP SIGNED MESSAGE----- | |
14 | Hash: SHA1 | |
15 | ||
16 | SHA1 1cfbd5694da3169c17b3648846c9f5e7223f4d26 ChangeLog | |
17 | SHA1 205981f550ad232f94d59d8eb79c5e6ecbe8f48d MANIFEST | |
18 | SHA1 8e0c2e200e666305e860ca20930ddf7f285825f3 META.yml | |
19 | SHA1 6f6d8f3971192224df63d9864dc341078c15286d Makefile.PL | |
20 | SHA1 80cff3b1f65e7df95eaa1a992b688c2c5e1d2b6e README | |
21 | SHA1 6823bd5e2e3cac12b7b9870d9840f4606f3eb422 lib/Date/Format.pm | |
22 | SHA1 08342e72298e839f21236dff7555f2505f928d32 lib/Date/Language.pm | |
23 | SHA1 50703aeade60a04398517416d30a2d8918c95578 lib/Date/Language/Afar.pm | |
24 | SHA1 f9450ca0047510a4102c32cc4e20a435cdd85b31 lib/Date/Language/Amharic.pm | |
25 | SHA1 f00534703736026830f729445d0d6f582481a05e lib/Date/Language/Austrian.pm | |
26 | SHA1 c5af5f819bbd3eff3b404e62f1a3735d7e4a038b lib/Date/Language/Brazilian.pm | |
27 | SHA1 e89738e9f3611a6de79cef7e791c20a05ac2a057 lib/Date/Language/Chinese.pm | |
28 | SHA1 d8765df8f8368d6b467a87b1f32397d50253747a lib/Date/Language/Chinese_GB.pm | |
29 | SHA1 f5061baf9b980aa0e8feefab059214775bb8182e lib/Date/Language/Czech.pm | |
30 | SHA1 726c12ddd66f70ddcfd5bbdbc094777255eb2b9b lib/Date/Language/Danish.pm | |
31 | SHA1 8566be869607c2b2024821def260de5a828f005f lib/Date/Language/Dutch.pm | |
32 | SHA1 ab20e0b3487b85a54a3d6321b50d01d43fe78427 lib/Date/Language/English.pm | |
33 | SHA1 9b057eea719ed24f643f4d284cf1fa6ae594e7dc lib/Date/Language/Finnish.pm | |
34 | SHA1 105169f2848df40ac1111f0130ec1bb4b74647d8 lib/Date/Language/French.pm | |
35 | SHA1 dc2f9c1cee48be3b73613ca9ed1291e9c976a37e lib/Date/Language/Gedeo.pm | |
36 | SHA1 794a9b715e66fdcc428a65b2972ced4fee62b52c lib/Date/Language/German.pm | |
37 | SHA1 863bb62fd08b3e61c63a2df3d65323d8e6c1b651 lib/Date/Language/Greek.pm | |
38 | SHA1 8f0678fee75492f3675cf0b130fd39c7a589a552 lib/Date/Language/Hungarian.pm | |
39 | SHA1 34da50806290fe731fd1e01290728fcd0b6d02a2 lib/Date/Language/Icelandic.pm | |
40 | SHA1 de5069f424fed480586bc2dcff1cca1930bf98a1 lib/Date/Language/Italian.pm | |
41 | SHA1 e4e81280ba513a3ab6e0bee01704913dd730c9a8 lib/Date/Language/Norwegian.pm | |
42 | SHA1 13165e5b72586200a106aa2870fe92b49d94dd8c lib/Date/Language/Oromo.pm | |
43 | SHA1 71eaea1d32b8fcfa23c5a815e3fa54b9f84af80c lib/Date/Language/Romanian.pm | |
44 | SHA1 806f38e0789bf10f2e843c69f68bcfa50c0d78eb lib/Date/Language/Russian.pm | |
45 | SHA1 292c36c93532a57b667d7deedc23cefbb9bf478c lib/Date/Language/Russian_cp1251.pm | |
46 | SHA1 26efbebc7afd065da56ec09ee3b062a9ddd4a2d3 lib/Date/Language/Russian_koi8r.pm | |
47 | SHA1 d1658daedcf106f01869a4371b9c3e572330f864 lib/Date/Language/Sidama.pm | |
48 | SHA1 58f9ded75fc18c26eeb96ce6374e66565ad01494 lib/Date/Language/Somali.pm | |
49 | SHA1 8b970f347eb0718e210d7613db5ba88b124d189e lib/Date/Language/Spanish.pm | |
50 | SHA1 a52f8968a0fdf3e735d62f71b91d6b64a5f98fa3 lib/Date/Language/Swedish.pm | |
51 | SHA1 5da829cf39dc01331ad58f66eced0a1f47e346b6 lib/Date/Language/Tigrinya.pm | |
52 | SHA1 20fc6beb32657ca147719f713ff816bbb696da20 lib/Date/Language/TigrinyaEritrean.pm | |
53 | SHA1 30f77a43a000f2ce3d22b1b633261a20289025aa lib/Date/Language/TigrinyaEthiopian.pm | |
54 | SHA1 54288741c52b09ee92b0487848df74a08cdc3b9e lib/Date/Language/Turkish.pm | |
55 | SHA1 dbcc4a151b1c558b32ed61fa7ee98e0fb47b9d7f lib/Date/Parse.pm | |
56 | SHA1 394c7d372c25107ba5151ceca44c0599188907c7 lib/Time/Zone.pm | |
57 | SHA1 62465108c0d5fc14e08ae41e2f963c4d9074b1d6 t/cpanrt.t | |
58 | SHA1 7b16580497a96a4bc551b87b8b97ec89331e81f8 t/date.t | |
59 | SHA1 bf6f4a7c599485ab11779c99fc821378e547d26d t/format.t | |
60 | SHA1 acef4dd152cd391a3e7a7945c8405a50d965f335 t/getdate.t | |
61 | SHA1 501dcb487e33f6b2d4577ef2e6e5f67f038d3c04 t/lang.t | |
62 | -----BEGIN PGP SIGNATURE----- | |
63 | Version: GnuPG v1.4.9 (Darwin) | |
64 | ||
65 | iEYEARECAAYFAkq9E3QACgkQR0BL4gbYw3QQYACfQg56MxwRuw6XPWOfpumki+CN | |
66 | CWAAn1WM3GKmUyJdxf9g95yvZl552Tg0 | |
67 | =2lbe | |
68 | -----END PGP SIGNATURE----- |
0 | # Date::Format $Id: //depot/TimeDate/lib/Date/Format.pm#9 $ | |
1 | # | |
2 | # Copyright (c) 1995-1999 Graham Barr. All rights reserved. This program is free | |
0 | # Copyright (c) 1995-2009 Graham Barr. This program is free | |
3 | 1 | # software; you can redistribute it and/or modify it under the same terms |
4 | 2 | # as Perl itself. |
5 | 3 | |
9 | 7 | use vars qw(@EXPORT @ISA $VERSION); |
10 | 8 | require Exporter; |
11 | 9 | |
12 | $VERSION = "2.22"; | |
10 | $VERSION = "2.23"; | |
13 | 11 | @ISA = qw(Exporter); |
14 | 12 | @EXPORT = qw(time2str strftime ctime asctime); |
15 | 13 | |
235 | 233 | sub format_z { |
236 | 234 | my $t = timelocal(@{$_[0]}[0..5]); |
237 | 235 | my $o = defined $tzname ? tz_offset($tzname, $t) : tz_offset(undef,$t); |
238 | sprintf("%+03d%02d", int($o / 3600), abs(int($o % 3600))); | |
236 | sprintf("%+03d%02d", int($o / 3600), int(abs($o) % 3600) / 60); | |
239 | 237 | } |
240 | 238 | |
241 | 239 | sub format_c { &format_x . " " . &format_X } |
323 | 321 | |
324 | 322 | =head1 MULTI-LANGUAGE SUPPORT |
325 | 323 | |
326 | Date::Format is capable of formating into several languages, these are | |
327 | English, French, German and Italian. Changing the language is done via | |
328 | a static method call, for example | |
329 | ||
330 | Date::Format->language('German'); | |
331 | ||
332 | will change the language in which all subsequent dates are formatted. | |
333 | ||
334 | This is only a first pass, I am considering changing this to be | |
335 | ||
336 | $lang = Date::Language->new('German'); | |
324 | Date::Format is capable of formating into several languages by creating | |
325 | a language specific object and calling methods, see L<Date::Language> | |
326 | ||
327 | my $lang = Date::Language->new('German'); | |
337 | 328 | $lang->time2str("%a %b %e %T %Y\n", time); |
338 | 329 | |
339 | 330 | I am open to suggestions on this. |
353 | 344 | %c MM/DD/YY HH:MM:SS |
354 | 345 | %C ctime format: Sat Nov 19 21:05:57 1994 |
355 | 346 | %d numeric day of the month, with leading zeros (eg 01..31) |
356 | %e numeric day of the month, without leading zeros (eg 1..31) | |
347 | %e like %d, but a leading zero is replaced by a space (eg 1..32) | |
357 | 348 | %D MM/DD/YY |
358 | 349 | %G GPS week number (weeks since January 6, 1980) |
359 | 350 | %h month abbr |
390 | 381 | C<%y> and C<%Y> can be output in Roman numerals by prefixing the letter |
391 | 382 | with C<O>, e.g. C<%OY> will output the year as roman numerals. |
392 | 383 | |
384 | =head1 LIMITATION | |
385 | ||
386 | The functions in this module are limited to the time range that can be | |
387 | represented by the time_t data type, i.e. 1901-12-13 20:45:53 GMT to | |
388 | 2038-01-19 03:14:07 GMT. | |
389 | ||
393 | 390 | =head1 AUTHOR |
394 | 391 | |
395 | 392 | Graham Barr <gbarr@pobox.com> |
396 | 393 | |
397 | 394 | =head1 COPYRIGHT |
398 | 395 | |
399 | Copyright (c) 1995-1999 Graham Barr. All rights reserved. This program is free | |
396 | Copyright (c) 1995-2009 Graham Barr. This program is free | |
400 | 397 | software; you can redistribute it and/or modify it under the same terms |
401 | 398 | as Perl itself. |
402 | 399 |
14 | 14 | @DoW = qw(Sonntag Montag Dienstag Mittwoch Donnerstag Freitag Samstag); |
15 | 15 | @DoWs = qw(Son Mon Die Mit Don Fre Sam); |
16 | 16 | |
17 | use Date::Language::English (); | |
17 | 18 | @AMPM = @{Date::Language::English::AMPM}; |
18 | 19 | @Dsuf = @{Date::Language::English::Dsuf}; |
19 | 20 |
0 | ## | |
1 | ## English tables | |
2 | ## | |
3 | ||
4 | package Date::Language::Chinese; | |
5 | ||
6 | use Date::Language (); | |
7 | use vars qw(@ISA @DoW @DoWs @MoY @MoYs @AMPM @Dsuf %MoY %DoW $VERSION); | |
8 | @ISA = qw(Date::Language); | |
9 | $VERSION = "1.00"; | |
10 | ||
11 | @DoW = qw(星期日 星期一 星期二 星期三 星期四 星期五 星期六); | |
12 | @MoY = qw(一月 二月 三月 四月 五月 六月 | |
13 | 七月 八月 九月 十月 十一月 十二月); | |
14 | @DoWs = map { $_ } @DoW; | |
15 | @MoYs = map { $_ } @MoY; | |
16 | @AMPM = qw(上午 下午); | |
17 | ||
18 | @Dsuf = (qw(日 日 日 日 日 日 日 日 日 日)) x 3; | |
19 | ||
20 | @MoY{@MoY} = (0 .. scalar(@MoY)); | |
21 | @MoY{@MoYs} = (0 .. scalar(@MoYs)); | |
22 | @DoW{@DoW} = (0 .. scalar(@DoW)); | |
23 | @DoW{@DoWs} = (0 .. scalar(@DoWs)); | |
24 | ||
25 | # Formatting routines | |
26 | ||
27 | sub format_a { $DoWs[$_[0]->[6]] } | |
28 | sub format_A { $DoW[$_[0]->[6]] } | |
29 | sub format_b { $MoYs[$_[0]->[4]] } | |
30 | sub format_B { $MoY[$_[0]->[4]] } | |
31 | sub format_h { $MoYs[$_[0]->[4]] } | |
32 | sub format_p { $_[0]->[2] >= 12 ? $AMPM[1] : $AMPM[0] } | |
33 | ||
34 | sub format_o { sprintf("%2d%s",$_[0]->[3],"日") } | |
35 | 1; |
14 | 14 | @DoW = qw(Søndag Mandag Tirsdag Onsdag Torsdag Fredag Lørdag Søndag); |
15 | 15 | @DoWs = qw(Søn Man Tir Ons Tor Fre Lør Søn); |
16 | 16 | |
17 | use Date::Language::English (); | |
17 | 18 | @AMPM = @{Date::Language::English::AMPM}; |
18 | 19 | @Dsuf = @{Date::Language::English::Dsuf}; |
19 | 20 |
14 | 14 | @DoW = qw(Sonntag Montag Dienstag Mittwoch Donnerstag Freitag Samstag); |
15 | 15 | @DoWs = qw(Son Mon Die Mit Don Fre Sam); |
16 | 16 | |
17 | require Date::Language::English; | |
17 | use Date::Language::English (); | |
18 | 18 | @AMPM = @{Date::Language::English::AMPM}; |
19 | 19 | @Dsuf = @{Date::Language::English::Dsuf}; |
20 | 20 |
0 | ## | |
1 | ## Hungarian tables based on English | |
2 | ## | |
3 | # | |
4 | # This is a just-because-I-stumbled-across-it | |
5 | # -and-my-wife-is-Hungarian release: if Graham or | |
6 | # someone adds to docs to Date::Format, I'd be | |
7 | # glad to correct bugs and extend as neeed. | |
8 | # | |
9 | ||
10 | package Date::Language::Hungarian; | |
11 | ||
12 | =head1 NAME | |
13 | ||
14 | Date::Language::Hungarian - Magyar format for Date::Format | |
15 | ||
16 | =head1 SYNOPSIS | |
17 | ||
18 | my $lang = Date::Language->new('Hungarian'); | |
19 | print $lang->time2str("%a %b %e %T %Y", time); | |
20 | ||
21 | @lt = localtime(time); | |
22 | print $lang->time2str($template, time); | |
23 | print $lang->strftime($template, @lt); | |
24 | ||
25 | print $lang->time2str($template, time, $zone); | |
26 | print $lang->strftime($template, @lt, $zone); | |
27 | ||
28 | print $lang->ctime(time); | |
29 | print $lang->asctime(@lt); | |
30 | ||
31 | print $lang->ctime(time, $zone); | |
32 | print $lang->asctime(@lt, $zone); | |
33 | ||
34 | See L<Date::Format>. | |
35 | ||
36 | =head1 AUTHOR | |
37 | ||
38 | Paula Goddard (paula -at- paulacska -dot- com) | |
39 | ||
40 | =head1 LICENCE | |
41 | ||
42 | Made available under the same terms as Perl itself. | |
43 | ||
44 | =cut | |
45 | ||
46 | use strict; | |
47 | use warnings; | |
48 | use base "Date::Language"; | |
49 | use vars qw( @DoW @DoWs @MoY @MoYs @AMPM @Dsuf %MoY %DoW $VERSION); | |
50 | $VERSION = "1.01"; | |
51 | ||
52 | @DoW = qw(Vasárnap Hétfõ Kedd Szerda Csütörtök Péntek Szombat); | |
53 | @MoY = qw(Január Február Március Április Május Június | |
54 | Július Augusztus Szeptember Október November December); | |
55 | @DoWs = map { substr($_,0,3) } @DoW; | |
56 | @MoYs = map { substr($_,0,3) } @MoY; | |
57 | @AMPM = qw(DE. DU.); | |
58 | ||
59 | # There is no 'th or 'nd in Hungarian, just a dot | |
60 | @Dsuf = (".") x 31; | |
61 | ||
62 | @MoY{@MoY} = (0 .. scalar(@MoY)); | |
63 | @MoY{@MoYs} = (0 .. scalar(@MoYs)); | |
64 | @DoW{@DoW} = (0 .. scalar(@DoW)); | |
65 | @DoW{@DoWs} = (0 .. scalar(@DoWs)); | |
66 | ||
67 | # Formatting routines | |
68 | ||
69 | sub format_a { $DoWs[$_[0]->[6]] } | |
70 | sub format_A { $DoW[$_[0]->[6]] } | |
71 | sub format_b { $MoYs[$_[0]->[4]] } | |
72 | sub format_B { $MoY[$_[0]->[4]] } | |
73 | sub format_h { $MoYs[$_[0]->[4]] } | |
74 | sub format_p { $_[0]->[2] >= 12 ? $AMPM[1] : $AMPM[0] } | |
75 | sub format_P { lc($_[0]->[2] >= 12 ? $AMPM[1] : $AMPM[0]) } | |
76 | sub format_o { $_[0]->[3].'.' } | |
77 | ||
78 | ||
79 | ||
80 | sub format_D { &format_y . "." . &format_m . "." . &format_d } | |
81 | ||
82 | sub format_y { sprintf("%02d",$_[0]->[5] % 100) } | |
83 | sub format_d { sprintf("%02d",$_[0]->[3]) } | |
84 | sub format_m { sprintf("%02d",$_[0]->[4] + 1) } | |
85 | ||
86 | ||
87 | 1; |
0 | ## | |
1 | ## Icelandic tables | |
2 | ## | |
3 | ||
4 | package Date::Language::Icelandic; | |
5 | ||
6 | use Date::Language (); | |
7 | use vars qw(@ISA @DoW @DoWs @MoY @MoYs @AMPM @Dsuf %MoY %DoW $VERSION); | |
8 | @ISA = qw(Date::Language); | |
9 | $VERSION = "1.01"; | |
10 | ||
11 | @MoY = qw(Janúar Febrúar Mars Apríl Maí Júni | |
12 | Júli Ágúst September Október Nóvember Desember); | |
13 | @MoYs = qw(Jan Feb Mar Apr Maí Jún Júl Ágú Sep Okt Nóv Des); | |
14 | @DoW = qw(Sunnudagur Mánudagur Şriğjudagur Miğvikudagur Fimmtudagur Föstudagur Laugardagur Sunnudagur); | |
15 | @DoWs = qw(Sun Mán Þri Mið Fim Fös Lau Sun); | |
16 | ||
17 | use Date::Language::English (); | |
18 | @AMPM = @{Date::Language::English::AMPM}; | |
19 | @Dsuf = @{Date::Language::English::Dsuf}; | |
20 | ||
21 | @MoY{@MoY} = (0 .. scalar(@MoY)); | |
22 | @MoY{@MoYs} = (0 .. scalar(@MoYs)); | |
23 | @DoW{@DoW} = (0 .. scalar(@DoW)); | |
24 | @DoW{@DoWs} = (0 .. scalar(@DoWs)); | |
25 | ||
26 | # Formatting routines | |
27 | ||
28 | sub format_a { $DoWs[$_[0]->[6]] } | |
29 | sub format_A { $DoW[$_[0]->[6]] } | |
30 | sub format_b { $MoYs[$_[0]->[4]] } | |
31 | sub format_B { $MoY[$_[0]->[4]] } | |
32 | sub format_h { $MoYs[$_[0]->[4]] } | |
33 | sub format_p { $_[0]->[2] >= 12 ? $AMPM[1] : $AMPM[0] } | |
34 | ||
35 | 1; |
14 | 14 | @DoW = qw(Domenica Lunedi Martedi Mercoledi Giovedi Venerdi Sabato); |
15 | 15 | @DoWs = qw(Dom Lun Mar Mer Gio Ven Sab); |
16 | 16 | |
17 | use Date::Language::English (); | |
17 | 18 | @AMPM = @{Date::Language::English::AMPM}; |
18 | 19 | @Dsuf = @{Date::Language::English::Dsuf}; |
19 | 20 |
14 | 14 | @DoW = qw(Søndag Mandag Tirsdag Onsdag Torsdag Fredag Lørdag Søndag); |
15 | 15 | @DoWs = qw(Søn Man Tir Ons Tor Fre Lør Søn); |
16 | 16 | |
17 | use Date::Language::English (); | |
17 | 18 | @AMPM = @{Date::Language::English::AMPM}; |
18 | 19 | @Dsuf = @{Date::Language::English::Dsuf}; |
19 | 20 |
0 | ## | |
1 | ## Italian tables | |
2 | ## | |
3 | ||
4 | package Date::Language::Romanian; | |
5 | ||
6 | use Date::Language (); | |
7 | use vars qw(@ISA @DoW @DoWs @MoY @MoYs @AMPM @Dsuf %MoY %DoW $VERSION); | |
8 | @ISA = qw(Date::Language); | |
9 | $VERSION = "1.01"; | |
10 | ||
11 | @MoY = qw(ianuarie februarie martie aprilie mai iunie | |
12 | iulie august septembrie octombrie noembrie decembrie); | |
13 | @DoW = qw(duminica luni marti miercuri joi vineri sambata); | |
14 | @DoWs = map { substr($_,0,3) } @DoW; | |
15 | @MoYs = map { substr($_,0,3) } @MoY; | |
16 | ||
17 | @AMPM = qw(AM PM); | |
18 | ||
19 | @Dsuf = ('') x 31; | |
20 | ||
21 | ||
22 | @MoY{@MoY} = (0 .. scalar(@MoY)); | |
23 | @MoY{@MoYs} = (0 .. scalar(@MoYs)); | |
24 | @DoW{@DoW} = (0 .. scalar(@DoW)); | |
25 | @DoW{@DoWs} = (0 .. scalar(@DoWs)); | |
26 | ||
27 | # Formatting routines | |
28 | ||
29 | sub format_a { $DoWs[$_[0]->[6]] } | |
30 | sub format_A { $DoW[$_[0]->[6]] } | |
31 | sub format_b { $MoYs[$_[0]->[4]] } | |
32 | sub format_B { $MoY[$_[0]->[4]] } | |
33 | sub format_h { $MoYs[$_[0]->[4]] } | |
34 | sub format_p { $_[0]->[2] >= 12 ? $AMPM[1] : $AMPM[0] } | |
35 | ||
36 | 1; |
0 | ## | |
1 | ## Russian tables | |
2 | ## | |
3 | ## Contributed by Danil Pismenny <dapi@mail.ru> | |
4 | ||
5 | package Date::Language::Russian; | |
6 | ||
7 | use vars qw(@ISA @DoW @DoWs @MoY @MoYs @MoY2 @AMPM %MoY %DoW $VERSION); | |
8 | @ISA = qw(Date::Language Date::Format::Generic); | |
9 | $VERSION = "1.01"; | |
10 | ||
11 | @MoY = qw(Января Февраля Марта Апреля Мая Июня Июля Августа Сентября Октября Ноября Декабря); | |
12 | @MoY2 = qw(Январь Февраль Март Апрель Май Июнь Июль Август Сентябрь Октябрь Ноябрь Декабрь); | |
13 | @MoYs = qw(Янв Фев Мрт Апр Май Июн Июл Авг Сен Окт Ноя Дек); | |
14 | ||
15 | @DoW = qw(Понедельник Вторник Среда Четверг Пятница Суббота Воскресенье); | |
16 | @DoWs = qw(Пн Вт Ср Чт Пт Сб Вс); | |
17 | @DoWs2 = qw(Пнд Втр Срд Чтв Птн Сбт Вск); | |
18 | ||
19 | @AMPM = qw(─л лл); | |
20 | ||
21 | @MoY{@MoY} = (0 .. scalar(@MoY)); | |
22 | @MoY{@MoYs} = (0 .. scalar(@MoYs)); | |
23 | @DoW{@DoW} = (0 .. scalar(@DoW)); | |
24 | @DoW{@DoWs} = (0 .. scalar(@DoWs)); | |
25 | ||
26 | # Formatting routines | |
27 | ||
28 | sub format_a { $DoWs[$_[0]->[6]] } | |
29 | sub format_A { $DoW[$_[0]->[6]] } | |
30 | sub format_b { $MoYs[$_[0]->[4]] } | |
31 | sub format_B { $MoY[$_[0]->[4]] } | |
32 | sub format_h { $MoYs[$_[0]->[4]] } | |
33 | sub format_p { $_[0]->[2] >= 12 ? $AMPM[1] : $AMPM[0] } | |
34 | ||
35 | sub format_d { $_[0]->[3] } | |
36 | sub format_m { $_[0]->[4] + 1 } | |
37 | sub format_o { $_[0]->[3] . '.' } | |
38 | ||
39 | sub format_Q { $MoY2[$_[0]->[4]] } | |
40 | ||
41 | sub str2time { | |
42 | my ($self,$value) = @_; | |
43 | map {$value=~s/(\s|^)$DoWs2[$_](\s)/$DoWs[$_]$2/ig} (0..6); | |
44 | $value=~s/(\s+|^)ь┴м(\s+)/$1ьмн$2/; | |
45 | return $self->SUPER::str2time($value); | |
46 | } | |
47 | ||
48 | 1; |
0 | ## | |
1 | ## Russian cp1251 | |
2 | ## | |
3 | ||
4 | package Date::Language::Russian_cp1251; | |
5 | ||
6 | use Date::Language (); | |
7 | use vars qw(@ISA @DoW @DoWs @MoY @MoYs @AMPM @Dsuf %MoY %DoW $VERSION); | |
8 | @ISA = qw(Date::Language); | |
9 | $VERSION = "1.01"; | |
10 | ||
11 | @DoW = qw(Воскресенье Понедельник Вторник Среда Четверг Пятница Суббота); | |
12 | @MoY = qw(Январь Февраль Март Апрель Май Июнь | |
13 | Июль Август Сентябрь Октябрь Ноябрь Декабрь); | |
14 | @DoWs = qw(Вск Пнд Втр Срд Чтв Птн Сбт); | |
15 | #@DoWs = map { substr($_,0,3) } @DoW; | |
16 | @MoYs = map { substr($_,0,3) } @MoY; | |
17 | @AMPM = qw(AM PM); | |
18 | ||
19 | @Dsuf = ('e') x 31; | |
20 | #@Dsuf[11,12,13] = qw(å å å); | |
21 | #@Dsuf[30,31] = qw(å å); | |
22 | ||
23 | @MoY{@MoY} = (0 .. scalar(@MoY)); | |
24 | @MoY{@MoYs} = (0 .. scalar(@MoYs)); | |
25 | @DoW{@DoW} = (0 .. scalar(@DoW)); | |
26 | @DoW{@DoWs} = (0 .. scalar(@DoWs)); | |
27 | ||
28 | # Formatting routines | |
29 | ||
30 | sub format_a { $DoWs[$_[0]->[6]] } | |
31 | sub format_A { $DoW[$_[0]->[6]] } | |
32 | sub format_b { $MoYs[$_[0]->[4]] } | |
33 | sub format_B { $MoY[$_[0]->[4]] } | |
34 | sub format_h { $MoYs[$_[0]->[4]] } | |
35 | sub format_p { $_[0]->[2] >= 12 ? $AMPM[1] : $AMPM[0] } | |
36 | sub format_o { sprintf("%2de",$_[0]->[3]) } | |
37 | ||
38 | 1; |
0 | ## | |
1 | ## Russian koi8r | |
2 | ## | |
3 | ||
4 | package Date::Language::Russian_koi8r; | |
5 | ||
6 | use Date::Language (); | |
7 | use vars qw(@ISA @DoW @DoWs @MoY @MoYs @AMPM @Dsuf %MoY %DoW $VERSION); | |
8 | @ISA = qw(Date::Language); | |
9 | $VERSION = "1.01"; | |
10 | ||
11 | @DoW = qw(Воскресенье Понедельник Вторник Среда Четверг Пятница Суббота); | |
12 | @MoY = qw(Январь Февраль Март Апрель Май Июнь | |
13 | Июль Август Сентябрь Октябрь Ноябрь Декабрь); | |
14 | @DoWs = qw(Вск Пнд Втр Срд Чтв Птн Сбт); | |
15 | #@DoWs = map { substr($_,0,3) } @DoW; | |
16 | @MoYs = map { substr($_,0,3) } @MoY; | |
17 | @AMPM = qw(AM PM); | |
18 | ||
19 | @Dsuf = ('e') x 31; | |
20 | #@Dsuf[11,12,13] = qw(Å Å Å); | |
21 | #@Dsuf[30,31] = qw(Å Å); | |
22 | ||
23 | @MoY{@MoY} = (0 .. scalar(@MoY)); | |
24 | @MoY{@MoYs} = (0 .. scalar(@MoYs)); | |
25 | @DoW{@DoW} = (0 .. scalar(@DoW)); | |
26 | @DoW{@DoWs} = (0 .. scalar(@DoWs)); | |
27 | ||
28 | # Formatting routines | |
29 | ||
30 | sub format_a { $DoWs[$_[0]->[6]] } | |
31 | sub format_A { $DoW[$_[0]->[6]] } | |
32 | sub format_b { $MoYs[$_[0]->[4]] } | |
33 | sub format_B { $MoY[$_[0]->[4]] } | |
34 | sub format_h { $MoYs[$_[0]->[4]] } | |
35 | sub format_p { $_[0]->[2] >= 12 ? $AMPM[1] : $AMPM[0] } | |
36 | sub format_o { sprintf("%2de",$_[0]->[3]) } | |
37 | ||
38 | 1; |
0 | ## | |
1 | ## Spanish tables | |
2 | ## | |
3 | ||
4 | package Date::Language::Spanish; | |
5 | ||
6 | use Date::Language (); | |
7 | use vars qw(@ISA @DoW @DoWs @MoY @MoYs @AMPM @Dsuf %MoY %DoW $VERSION); | |
8 | @ISA = qw(Date::Language); | |
9 | $VERSION = "1.00"; | |
10 | ||
11 | @DoW = qw(domingo lunes martes miércoles jueves viernes sábado); | |
12 | @MoY = qw(enero febrero marzo abril mayo junio | |
13 | julio agosto septiembre octubre noviembre diciembre); | |
14 | @DoWs = map { substr($_,0,3) } @DoW; | |
15 | @MoYs = map { substr($_,0,3) } @MoY; | |
16 | @AMPM = qw(AM PM); | |
17 | ||
18 | @Dsuf = ((qw(ro do ro to to to mo vo no mo)) x 3, 'ro'); | |
19 | ||
20 | @MoY{@MoY} = (0 .. scalar(@MoY)); | |
21 | @MoY{@MoYs} = (0 .. scalar(@MoYs)); | |
22 | @DoW{@DoW} = (0 .. scalar(@DoW)); | |
23 | @DoW{@DoWs} = (0 .. scalar(@DoWs)); | |
24 | ||
25 | # Formatting routines | |
26 | ||
27 | sub format_a { $DoWs[$_[0]->[6]] } | |
28 | sub format_A { $DoW[$_[0]->[6]] } | |
29 | sub format_b { $MoYs[$_[0]->[4]] } | |
30 | sub format_B { $MoY[$_[0]->[4]] } | |
31 | sub format_h { $MoYs[$_[0]->[4]] } | |
32 | sub format_p { $_[0]->[2] >= 12 ? $AMPM[1] : $AMPM[0] } | |
33 | ||
34 | 1; |
18 | 18 | # the ordinals are not typically used in modern times |
19 | 19 | @Dsuf = ('a' x 2, 'e' x 29); |
20 | 20 | |
21 | use Date::Language::English (); | |
21 | 22 | @AMPM = @{Date::Language::English::AMPM}; |
22 | 23 | |
23 | 24 | |
36 | 37 | sub format_p { $_[0]->[2] >= 12 ? $AMPM[1] : $AMPM[0] } |
37 | 38 | sub format_o { sprintf("%2de",$_[0]->[3]) } |
38 | 39 | |
39 | 1;⏎ | |
40 | 1; |
8 | 8 | @ISA = qw(Date::Language); |
9 | 9 | $VERSION = "1.00"; |
10 | 10 | |
11 | @DoW = qw( | |
12 | "\x{U1230}\x{U1295}\x{U1260}\x{U1275}", | |
13 | "\x{U1230}\x{U1291}\x{U12ed}", | |
14 | "\x{U1230}\x{U1209}\x{U1235}", | |
15 | "\x{U1228}\x{U1261}\x{U12d5}", | |
16 | "\x{U1213}\x{U1219}\x{U1235}", | |
17 | "\x{U12d3}\x{U122d}\x{U1262}", | |
18 | "\x{U1240}\x{U12f3}\x{U121d}" | |
11 | @DoW = ( | |
12 | "\x{1230}\x{1295}\x{1260}\x{1275}", | |
13 | "\x{1230}\x{1291}\x{12ed}", | |
14 | "\x{1230}\x{1209}\x{1235}", | |
15 | "\x{1228}\x{1261}\x{12d5}", | |
16 | "\x{1213}\x{1219}\x{1235}", | |
17 | "\x{12d3}\x{122d}\x{1262}", | |
18 | "\x{1240}\x{12f3}\x{121d}" | |
19 | 19 | ); |
20 | @MoY = qw( | |
21 | "\x{U1303}\x{U1295}\x{U12e9}\x{U12c8}\x{U122a}", | |
22 | "\x{U134c}\x{U1265}\x{U1229}\x{U12c8}\x{U122a}", | |
23 | "\x{U121b}\x{U122d}\x{U127d}", | |
24 | "\x{U12a4}\x{U1355}\x{U1228}\x{U120d}", | |
25 | "\x{U121c}\x{U12ed}", | |
26 | "\x{U1301}\x{U1295}", | |
27 | "\x{U1301}\x{U120b}\x{U12ed}", | |
28 | "\x{U12a6}\x{U1308}\x{U1235}\x{U1275}", | |
29 | "\x{U1234}\x{U1355}\x{U1274}\x{U121d}\x{U1260}\x{U122d}", | |
30 | "\x{U12a6}\x{U12ad}\x{U1270}\x{U12cd}\x{U1260}\x{U122d}", | |
31 | "\x{U1296}\x{U126c}\x{U121d}\x{U1260}\x{U122d}", | |
32 | "\x{U12f2}\x{U1234}\x{U121d}\x{U1260}\x{U122d}" | |
20 | @MoY = ( | |
21 | "\x{1303}\x{1295}\x{12e9}\x{12c8}\x{122a}", | |
22 | "\x{134c}\x{1265}\x{1229}\x{12c8}\x{122a}", | |
23 | "\x{121b}\x{122d}\x{127d}", | |
24 | "\x{12a4}\x{1355}\x{1228}\x{120d}", | |
25 | "\x{121c}\x{12ed}", | |
26 | "\x{1301}\x{1295}", | |
27 | "\x{1301}\x{120b}\x{12ed}", | |
28 | "\x{12a6}\x{1308}\x{1235}\x{1275}", | |
29 | "\x{1234}\x{1355}\x{1274}\x{121d}\x{1260}\x{122d}", | |
30 | "\x{12a6}\x{12ad}\x{1270}\x{12cd}\x{1260}\x{122d}", | |
31 | "\x{1296}\x{126c}\x{121d}\x{1260}\x{122d}", | |
32 | "\x{12f2}\x{1234}\x{121d}\x{1260}\x{122d}" | |
33 | 33 | ); |
34 | 34 | @DoWs = map { substr($_,0,3) } @DoW; |
35 | 35 | @MoYs = map { substr($_,0,3) } @MoY; |
0 | #----------------------------------------------------# | |
1 | # | |
2 | # Turkish tables | |
3 | # Burak Gürsoy <burak@cpan.org> | |
4 | # Last modified: Sat Nov 15 20:28:32 2003 | |
5 | # | |
6 | # use Date::Language; | |
7 | # my $turkish = Date::Language->new('Turkish'); | |
8 | # print $turkish->time2str("%e %b %Y, %a %T\n", time); | |
9 | # print $turkish->str2time("25 Haz 1996 21:09:55 +0100"); | |
10 | #----------------------------------------------------# | |
11 | ||
12 | package Date::Language::Turkish; | |
13 | use Date::Language (); | |
14 | use vars qw(@ISA @DoW @DoWs @MoY @MoYs @AMPM @Dsuf %MoY %DoW $VERSION %DsufMAP); | |
15 | @ISA = qw(Date::Language); | |
16 | $VERSION = "1.0"; | |
17 | ||
18 | @DoW = qw(Pazar Pazartesi Salý Çarþamba Perþembe Cuma Cumartesi); | |
19 | @MoY = qw(Ocak Þubat Mart Nisan Mayýs Haziran Temmuz Aðustos Eylül Ekim Kasým Aralýk); | |
20 | @DoWs = map { substr($_,0,3) } @DoW; | |
21 | $DoWs[1] = 'Pzt'; # Since we'll get two 'Paz' s | |
22 | $DoWs[-1] = 'Cmt'; # Since we'll get two 'Cum' s | |
23 | @MoYs = map { substr($_,0,3) } @MoY; | |
24 | @AMPM = ('',''); # no am-pm thingy | |
25 | ||
26 | # not easy as in english... maybe we can just use a dot "." ? :) | |
27 | %DsufMAP = ( | |
28 | (map {$_ => 'inci', $_+10 => 'inci', $_+20 => 'inci' } 1,2,5,8 ), | |
29 | (map {$_ => 'nci', $_+10 => 'nci', $_+20 => 'nci' } 7 ), | |
30 | (map {$_ => 'nci', $_+10 => 'nci', $_+20 => 'nci' } 2 ), | |
31 | (map {$_ => 'üncü', $_+10 => 'üncü', $_+20 => 'üncü' } 3,4 ), | |
32 | (map {$_ => 'uncu', $_+10 => 'uncu', $_+20 => 'uncu' } 9 ), | |
33 | (map {$_ => 'ncý', $_+10 => 'ncý', $_+20 => 'ncý' } 6 ), | |
34 | (map {$_ => 'uncu', } 10,30 ), | |
35 | 20 => 'nci', | |
36 | 31 => 'inci', | |
37 | ); | |
38 | ||
39 | @Dsuf = map{ $DsufMAP{$_} } sort {$a <=> $b} keys %DsufMAP; | |
40 | @MoY{@MoY} = (0 .. scalar(@MoY)); | |
41 | @MoY{@MoYs} = (0 .. scalar(@MoYs)); | |
42 | @DoW{@DoW} = (0 .. scalar(@DoW)); | |
43 | @DoW{@DoWs} = (0 .. scalar(@DoWs)); | |
44 | ||
45 | # Formatting routines | |
46 | ||
47 | sub format_a { $DoWs[$_[0]->[6]] } | |
48 | sub format_A { $DoW[ $_[0]->[6]] } | |
49 | sub format_b { $MoYs[$_[0]->[4]] } | |
50 | sub format_B { $MoY[ $_[0]->[4]] } | |
51 | sub format_h { $MoYs[$_[0]->[4]] } | |
52 | sub format_p { '' } # disable | |
53 | sub format_P { '' } # disable | |
54 | sub format_o { sprintf("%2d%s",$_[0]->[3],$Dsuf[$_[0]->[3]-1]) } | |
55 | ||
56 | 1; | |
57 | ||
58 | __END__ |
80 | 80 | } |
81 | 81 | |
82 | 82 | 1; |
83 | ||
84 | __END__ | |
85 | ||
86 | ||
87 | =head1 NAME | |
88 | ||
89 | Date::Language - Language specific date formating and parsing | |
90 | ||
91 | =head1 SYNOPSIS | |
92 | ||
93 | use Date::Language; | |
94 | ||
95 | my $lang = Date::Language->new('German'); | |
96 | $lang->time2str("%a %b %e %T %Y\n", time); | |
97 | ||
98 | =head1 DESCRIPTION | |
99 | ||
100 | L<Date::Language> provides objects to parse and format dates for specific languages. Available languages are | |
101 | ||
102 | Afar French Russian_cp1251 | |
103 | Amharic Gedeo Russian_koi8r | |
104 | Austrian German Sidama | |
105 | Brazilian Greek Somali | |
106 | Chinese Hungarian Spanish | |
107 | Chinese_GB Icelandic Swedish | |
108 | Czech Italian Tigrinya | |
109 | Danish Norwegian TigrinyaEritrean | |
110 | Dutch Oromo TigrinyaEthiopian | |
111 | English Romanian Turkish | |
112 | Finnish Russian | |
113 | ||
114 | =head1 METHODS | |
115 | ||
116 | =over | |
117 | ||
118 | =item time2str | |
119 | ||
120 | See L<Date::Format/time2str> | |
121 | ||
122 | =item strftime | |
123 | ||
124 | See L<Date::Format/strftime> | |
125 | ||
126 | =item ctime | |
127 | ||
128 | See L<Date::Format/ctime> | |
129 | ||
130 | =item asctime | |
131 | ||
132 | See L<Date::Format/asctime> | |
133 | ||
134 | =item str2time | |
135 | ||
136 | See L<Date::Parse/str2time> | |
137 | ||
138 | =item strptime | |
139 | ||
140 | See L<Date::Parse/strptime> | |
141 | ||
142 | =back | |
143 |
0 | # Date::Parse $Id: //depot/TimeDate/lib/Date/Parse.pm#22 $ | |
1 | # | |
2 | # Copyright (c) 1995 Graham Barr. All rights reserved. This program is free | |
0 | # Copyright (c) 1995-2009 Graham Barr. This program is free | |
3 | 1 | # software; you can redistribute it and/or modify it under the same terms |
4 | 2 | # as Perl itself. |
5 | 3 | |
16 | 14 | @ISA = qw(Exporter); |
17 | 15 | @EXPORT = qw(&strtotime &str2time &strptime); |
18 | 16 | |
19 | $VERSION = "2.27"; | |
17 | $VERSION = "2.29"; | |
20 | 18 | |
21 | 19 | my %month = ( |
22 | 20 | january => 0, |
85 | 83 | # ignore day names |
86 | 84 | $dtstr =~ s#([\d\w\s])[\.\,]\s#$1 #sog; |
87 | 85 | $dtstr =~ s/,/ /g; |
88 | $dtstr =~ s#($daypat)\s*(den\s)?# #o; | |
86 | $dtstr =~ s#($daypat)\s*(den\s)?\b# #o; | |
89 | 87 | # Time: 12:00 or 12:00:00 with optional am/pm |
90 | 88 | |
91 | 89 | return unless $dtstr =~ /\S/; |
92 | 90 | |
93 | if ($dtstr =~ s/\s(\d{4})([-:]?)(\d\d?)\2(\d\d?)(?:[Tt ](\d\d?)(?:([-:]?)(\d\d?)(?:\6(\d\d?)(?:[.,](\d+))?)?)?)?(?=\D)/ /) { | |
91 | if ($dtstr =~ s/\s(\d{4})([-:]?)(\d\d?)\2(\d\d?)(?:[-Tt ](\d\d?)(?:([-:]?)(\d\d?)(?:\6(\d\d?)(?:[.,](\d+))?)?)?)?(?=\D)/ /) { | |
94 | 92 | ($year,$month,$day,$hh,$mm,$ss,$frac) = ($1,$3-1,$4,$5,$7,$8,$9); |
95 | 93 | } |
96 | 94 | |
97 | 95 | unless (defined $hh) { |
98 | if ($dtstr =~ s#[:\s](\d\d?):(\d\d?)(:(\d\d?)(?:\.\d+)?)?\s*(?:([ap])\.?m?\.?)?\s# #o) { | |
99 | ($hh,$mm,$ss) = ($1,$2,$4 || 0); | |
100 | $merid = $ampm{$5} if $5; | |
96 | if ($dtstr =~ s#[:\s](\d\d?):(\d\d?)(:(\d\d?)(?:\.\d+)?)?(z)?\s*(?:([ap])\.?m?\.?)?\s# #o) { | |
97 | ($hh,$mm,$ss) = ($1,$2,$4); | |
98 | $zone = 0 if $5; | |
99 | $merid = $ampm{$6} if $6; | |
101 | 100 | } |
102 | 101 | |
103 | 102 | # Time: 12 am |
138 | 137 | } |
139 | 138 | elsif ($dtstr =~ s#($monpat)\s*(\d+)\s*($sufpat)?\s# #o) { |
140 | 139 | ($month,$day) = ($month{$1},$2); |
140 | } | |
141 | elsif ($dtstr =~ s#($monpat)([\/-])(\d+)[\/-]# #o) { | |
142 | ($month,$day) = ($month{$1},$3); | |
141 | 143 | } |
142 | 144 | |
143 | 145 | # Date: 961212 |
258 | 260 | if (defined $zone) { |
259 | 261 | $result = eval { |
260 | 262 | local $SIG{__DIE__} = sub {}; # Ick! |
261 | timegm($ss,$mm,$hh,$day,$month,$year); | |
263 | timegm($ss,$mm,$hh,$day,$month,$year+1900); | |
262 | 264 | }; |
263 | 265 | return undef |
264 | 266 | if !defined $result |
270 | 272 | else { |
271 | 273 | $result = eval { |
272 | 274 | local $SIG{__DIE__} = sub {}; # Ick! |
273 | timelocal($ss,$mm,$hh,$day,$month,$year); | |
275 | timelocal($ss,$mm,$hh,$day,$month,$year+1900); | |
274 | 276 | }; |
275 | 277 | return undef |
276 | 278 | if !defined $result |
321 | 323 | |
322 | 324 | =head1 MULTI-LANGUAGE SUPPORT |
323 | 325 | |
324 | Date::Parse is capable of parsing dates in several languages, these are | |
326 | Date::Parse is capable of parsing dates in several languages, these include | |
325 | 327 | English, French, German and Italian. |
326 | 328 | |
327 | 329 | $lang = Date::Language->new('German'); |
345 | 347 | |
346 | 348 | =head1 LIMITATION |
347 | 349 | |
348 | Date::Parse uses Time::Local internally, so is limited to only parsing dates | |
349 | which result in valid values for Time::Local::timelocal | |
350 | Date::Parse uses L<Time::Local> internally, so is limited to only parsing dates | |
351 | which result in valid values for Time::Local::timelocal. This generally means dates | |
352 | between 1901-12-17 00:00:00 GMT and 2038-01-16 23:59:59 GMT | |
350 | 353 | |
351 | 354 | =head1 BUGS |
352 | 355 | |
368 | 371 | |
369 | 372 | =head1 COPYRIGHT |
370 | 373 | |
371 | Copyright (c) 1995 Graham Barr. All rights reserved. This program is free | |
374 | Copyright (c) 1995-2009 Graham Barr. This program is free | |
372 | 375 | software; you can redistribute it and/or modify it under the same terms |
373 | 376 | as Perl itself. |
374 | 377 | |
375 | 378 | =cut |
376 | 379 | |
377 | # $Id: //depot/TimeDate/lib/Date/Parse.pm#22 $ | |
378 |
19 | 19 | This is a collection of miscellaneous timezone manipulation routines. |
20 | 20 | |
21 | 21 | C<tz2zone()> parses the TZ environment variable and returns a timezone |
22 | string suitable for inclusion in L<date>-like output. It opionally takes | |
22 | string suitable for inclusion in L<date(1)>-like output. It opionally takes | |
23 | 23 | a timezone string, a time, and a is-dst flag. |
24 | 24 | |
25 | 25 | C<tz_local_offset()> determins the offset from GMT time in seconds. It |
47 | 47 | |
48 | 48 | @ISA = qw(Exporter); |
49 | 49 | @EXPORT = qw(tz2zone tz_local_offset tz_offset tz_name); |
50 | $VERSION = "2.22"; | |
50 | $VERSION = "2.24"; | |
51 | 51 | |
52 | 52 | # Parts stolen from code by Paul Foley <paul@ascent.com> |
53 | 53 | |
155 | 155 | "cdt" => -5*3600, # Central Daylight |
156 | 156 | "mdt" => -6*3600, # Mountain Daylight |
157 | 157 | "pdt" => -7*3600, # Pacific Daylight |
158 | "akdt" => -8*3600, # Alaska Daylight | |
158 | 159 | "ydt" => -8*3600, # Yukon Daylight |
159 | 160 | "hdt" => -9*3600, # Hawaii Daylight |
160 | 161 | "bst" => +1*3600, # British Summer |
161 | 162 | "mest" => +2*3600, # Middle European Summer |
163 | "metdst" => +2*3600, # Middle European DST | |
162 | 164 | "sst" => +2*3600, # Swedish Summer |
163 | 165 | "fst" => +2*3600, # French Summer |
164 | 166 | "cest" => +2*3600, # Central European Daylight |
165 | 167 | "eest" => +3*3600, # Eastern European Summer |
168 | "msd" => +4*3600, # Moscow Daylight | |
166 | 169 | "wadt" => +8*3600, # West Australian Daylight |
167 | 170 | "kdt" => +10*3600, # Korean Daylight |
168 | 171 | # "cadt" => +10*3600+1800, # Central Australian Daylight |
172 | "aedt" => +11*3600, # Eastern Australian Daylight | |
169 | 173 | "eadt" => +11*3600, # Eastern Australian Daylight |
170 | 174 | "nzd" => +13*3600, # New Zealand Daylight |
171 | 175 | "nzdt" => +13*3600, # New Zealand Daylight |
193 | 197 | "cst" => -6*3600, # Central Standard |
194 | 198 | "mst" => -7*3600, # Mountain Standard |
195 | 199 | "pst" => -8*3600, # Pacific Standard |
200 | "akst" => -9*3600, # Alaska Standard | |
196 | 201 | "yst" => -9*3600, # Yukon Standard |
197 | 202 | "hst" => -10*3600, # Hawaii Standard |
198 | 203 | "cat" => -10*3600, # Central Alaska |
210 | 215 | "eet" => +2*3600, # Eastern Europe, USSR Zone 1 |
211 | 216 | "ukr" => +2*3600, # Ukraine |
212 | 217 | "bt" => +3*3600, # Baghdad, USSR Zone 2 |
218 | "msk" => +3*3600, # Moscow | |
213 | 219 | # "it" => +3*3600+1800,# Iran |
214 | 220 | "zp4" => +4*3600, # USSR Zone 3 |
215 | 221 | "zp5" => +5*3600, # USSR Zone 4 |
225 | 231 | "jst" => +9*3600, # Japan Standard, USSR Zone 8 |
226 | 232 | "kst" => +9*3600, # Korean Standard |
227 | 233 | # "cast" => +9*3600+1800,# Central Australian Standard |
234 | "aest" => +10*3600, # Eastern Australian Standard | |
228 | 235 | "east" => +10*3600, # Eastern Australian Standard |
229 | 236 | "gst" => +10*3600, # Guam Standard, USSR Zone 9 |
230 | 237 | "nzt" => +12*3600, # New Zealand |
0 | use Date::Format qw(time2str); | |
1 | use Date::Parse qw(strptime); | |
2 | ||
3 | print "1..5\n"; | |
4 | ||
5 | my $i = 1; | |
6 | ||
7 | { # RT#45067 Date::Format with %z gives wrong results for half-hour timezones | |
8 | ||
9 | foreach my $zone (qw(-0430 -0445)) { | |
10 | my $zone_str = time2str("%Z %z", time, $zone); | |
11 | print "# $zone => $zone_str\n"; | |
12 | print "not " unless $zone_str eq "$zone $zone"; | |
13 | print "ok ", $i++, "\n"; | |
14 | } | |
15 | } | |
16 | ||
17 | ||
18 | { # RT#48164: Date::Parse unable to set seconds correctly | |
19 | ||
20 | foreach my $str ("2008.11.30 22:35 CET", "2008-11-30 22:35 CET") { | |
21 | my @t = strptime($str); | |
22 | my $t = join ":", map { defined($_) ? $_ : "-" } @t; | |
23 | print "# $str => $t\n"; | |
24 | print "not " unless $t eq "-:35:22:30:10:108:3600"; | |
25 | print "ok ", $i++, "\n"; | |
26 | } | |
27 | } | |
28 | ||
29 | { # RT#17396: Parse error for french date with 'mars' (march) as month | |
30 | use Date::Language; | |
31 | my $dateP = Date::Language->new('French'); | |
32 | my $timestamp = $dateP->str2time('4 mars 2005'); | |
33 | my ($ss, $mm, $hh, $day, $month, $year, $zone) = localtime $timestamp; | |
34 | $month++; | |
35 | $year += 1900; | |
36 | my $date = "$day/$month/$year"; | |
37 | print "# $date\n"; | |
38 | print "not " unless $date eq "4/3/2005"; | |
39 | print "ok ", $i++, "\n"; | |
40 | } | |
41 | ||
42 |
4 | 4 | |
5 | 5 | $data = qq!1995-01-24 |
6 | 6 | 1995-01-24T09:08:17.1823213 |
7 | - 1935-01-24T09:08:17 | |
8 | - Fri Dec 17 00:00:00 1901 GMT | |
9 | Tue Jan 16 23:59:59 2038 GMT | |
10 | 2001-02-02 00:00:00 GMT | |
11 | 2035-02-02 00:00:00 GMT | |
12 | - 16 Jun 33 07:29:35 CST | |
13 | 2002-02-26-10:37:21.141 GMT | |
7 | 14 | Wed, 16 Jun 94 07:29:35 CST |
8 | 15 | Wed, 16 Nov 94 07:29:35 CST |
9 | 16 | Mon, 21 Nov 94 07:42:23 CST |
29 | 36 | 21-dec 17:05 |
30 | 37 | 21/dec 17:05 |
31 | 38 | 21/dec/93 17:05 |
39 | dec/21/93 17:05 | |
40 | Dec/21/1993 17:05:00 | |
41 | dec-21-1993 17:05 | |
42 | Dec-21-93 17:05:00 | |
32 | 43 | dec 21 1994 17:05 |
33 | 44 | dec 21 94 17:05 |
34 | 45 | dec 21 94 17:05 GMT |
125 | 136 | Tue, 15 Nov 1994 13:11:47 -0800 |
126 | 137 | Tue, 15 Nov 1994 13:18:38 -0800 |
127 | 138 | Tue, 15 Nov 1994 0:18:38 -0800 |
139 | 10:00:00Z | |
140 | 10:00:00 | |
141 | 10:00 | |
142 | 10:00 +100 | |
143 | 10:00 +0100 | |
144 | 20020722T100000Z | |
145 | Jul 22 10:00:00 UTC 2002 | |
146 | 2002-07-22 10:00:00Z | |
147 | 2002-07-22 10:00:00 Z | |
148 | 2002-07-22 10:00 Z | |
149 | 2002-07-22 10:00Z | |
150 | 2002-07-22 10:00 +100 | |
151 | 2002-07-22 10:00 +0100 | |
128 | 152 | !; |
129 | 153 | |
130 | 154 | @data = split(/\n/, $data); |
137 | 161 | |
138 | 162 | foreach (@data) |
139 | 163 | { |
140 | $time = int str2time($_); | |
164 | my $pre_1970 = s/^-\s*//; | |
165 | ||
166 | if ($pre_1970 and $^O eq "MSWin32") { | |
167 | print "ok ",$loop++," # skip\n"; | |
168 | next; | |
169 | } | |
170 | ||
171 | $time = str2time($_); | |
141 | 172 | |
142 | 173 | if(defined $time) |
143 | 174 | { |
175 | $time = int $time; | |
176 | ||
144 | 177 | $x = time2str("%a %b %e %T %Y %Z",$time,'GMT'); |
145 | 178 | |
146 | 179 | printf "%-40s\t%s\n", $_,$x,"\n"; |
18 | 18 | 1995-06-24 GMT ;803952000 |
19 | 19 | 1995-06-24 BST ;803948400 |
20 | 20 | 1992-1-2 12:01 GMT ;694353660 |
21 | 1992-1-2-12:01:00 GMT ;694353660 | |
21 | 22 | Wed, 16 Jun 94 07:29:35 CST ;771773375 |
22 | 23 | Wed,16 Jun 94 07:29:35 CST ;771773375 |
23 | 24 | Wed, 16 Nov 94 07:29:35 CST ;784992575 |
131 | 132 | Jul 13 1999 1:23P GMT ;931872180 |
132 | 133 | Jul 13 1999 1:23P.M GMT ;931872180 |
133 | 134 | Jul 13 1999 1:23P.M. GMT ;931872180 |
135 | Jul-13-1999 1:23P.M GMT ;931872180 | |
136 | Jul/13/1999 1:23P.M. GMT ;931872180 | |
134 | 137 | 2001-02-26T13:44:12-0700 ;983220252 |
135 | 138 | 2001-02-26T13:44-0700 ;983220240 |
136 | 139 | 2001-02-26T13-0700 ;983217600 |
141 | 144 | 2002-11-07T23:31:49-05:00 ;1036729909 |
142 | 145 | 2003-02-17T07:45:56Z ;1045467956 |
143 | 146 | 2003-02-17T08:14:07.198189+0000 ;1045469647.198189 |
147 | 20020722T100000Z ;1027332000 | |
148 | Jul 22 10:00:00 UTC 2002 ;1027332000 | |
149 | 2002-07-22 10:00:00Z ;1027332000 | |
150 | 2002-07-22 10:00:00 Z ;1027332000 | |
151 | 2002-07-22 10:00 Z ;1027332000 | |
152 | 2002-07-22 10:00Z ;1027332000 | |
153 | 2002-07-22 10:00 +100 ;1027328400 | |
154 | 2002-07-22 10:00 +0100 ;1027328400 | |
144 | 155 | !; |
145 | 156 | |
146 | 157 | require Time::Local; |