# NAME Time::Strptime - parse date and time string. # SYNOPSIS use Time::Strptime qw/strptime/; # function my ($epoch_f, $offset_f) = strptime('%Y-%m-%d %H:%M:%S', '2014-01-01 00:00:00'); # OO style my $fmt = Time::Strptime::Format->new('%Y-%m-%d %H:%M:%S'); my ($epoch_o, $offset_o) = $fmt->parse('2014-01-01 00:00:00'); # DESCRIPTION **THE SOFTWARE IS IT'S IN ALPHA QUALITY. IT MAY CHANGE THE API WITHOUT NOTICE.** Time::Strptime is pure perl date and time string parser. In other words, This is pure perl implementation a [strptime(3)](http://man.he.net/man3/strptime). This module allows you to perform better by pre-compile the format by string. benchmark:GMT(-0000) `dt=DateTime, ts=Time::Strptime, tp=Time::Piece` Benchmark: timing 100000 iterations of dt, dt(cached), tp, tp(cached), ts, ts(cached)... dt: 34 wallclock secs (34.23 usr + 0.02 sys = 34.25 CPU) @ 2919.71/s (n=100000) dt(cached): 21 wallclock secs (20.50 usr + 0.01 sys = 20.51 CPU) @ 4875.67/s (n=100000) tp: 1 wallclock secs ( 1.52 usr + 0.00 sys = 1.52 CPU) @ 65789.47/s (n=100000) tp(cached): 1 wallclock secs ( 0.61 usr + 0.00 sys = 0.61 CPU) @ 163934.43/s (n=100000) ts: 24 wallclock secs (24.32 usr + 0.01 sys = 24.33 CPU) @ 4110.15/s (n=100000) ts(cached): 1 wallclock secs ( 0.59 usr + 0.00 sys = 0.59 CPU) @ 169491.53/s (n=100000) Rate dt ts dt(cached) tp tp(cached) ts(cached) dt 2920/s -- -29% -40% -96% -98% -98% ts 4110/s 41% -- -16% -94% -97% -98% dt(cached) 4876/s 67% 19% -- -93% -97% -97% tp 65789/s 2153% 1501% 1249% -- -60% -61% tp(cached) 163934/s 5515% 3889% 3262% 149% -- -3% ts(cached) 169492/s 5705% 4024% 3376% 158% 3% -- benchmark:Asia/Tokyo(-0900) `dt=DateTime, ts=Time::Strptime, tp=Time::Piece` Benchmark: timing 100000 iterations of dt, dt(cached), tp, tp(cached), ts, ts(cached)... dt: 41 wallclock secs (40.74 usr + 0.02 sys = 40.76 CPU) @ 2453.39/s (n=100000) dt(cached): 26 wallclock secs (26.09 usr + 0.01 sys = 26.10 CPU) @ 3831.42/s (n=100000) tp: 2 wallclock secs ( 2.10 usr + 0.00 sys = 2.10 CPU) @ 47619.05/s (n=100000) tp(cached): 1 wallclock secs ( 1.48 usr + 0.01 sys = 1.49 CPU) @ 67114.09/s (n=100000) ts: 27 wallclock secs (26.74 usr + 0.01 sys = 26.75 CPU) @ 3738.32/s (n=100000) ts(cached): 1 wallclock secs ( 0.83 usr + 0.00 sys = 0.83 CPU) @ 120481.93/s (n=100000) Rate dt ts dt(cached) tp tp(cached) ts(cached) dt 2453/s -- -34% -36% -95% -96% -98% ts 3738/s 52% -- -2% -92% -94% -97% dt(cached) 3831/s 56% 2% -- -92% -94% -97% tp 47619/s 1841% 1174% 1143% -- -29% -60% tp(cached) 67114/s 2636% 1695% 1652% 41% -- -44% ts(cached) 120482/s 4811% 3123% 3045% 153% 80% -- # FAQ ## What's the difference between this module and other modules? This module is fast and not require XS. but, support epoch `strptime` only. [DateTime](https://metacpan.org/pod/DateTime) is very useful and stable! but, It is slow. [Time::Piece](https://metacpan.org/pod/Time::Piece) is fast and useful! but, treatment of time zone is confusing. and, require XS. [Time::Moment](https://metacpan.org/pod/Time::Moment) is very fast and useful! but, not support `strptime`. and, require XS. ## How to specify a time zone? Set time zone to `$ENV{TZ}` and call `POSIX::tzset()`. NOTE: `POSIX::tzset()` is not supported on `cygwin` and `MSWin32`. example: use Time::Strptime qw/strptime/; use POSIX qw/tzset/; local $ENV{TZ} = 'Asia/Tokyo'; tzset(); my ($epoch, $offset) = strptime('%Y-%m-%d %H:%M:%S', '2014-01-01 00:00:00'); And, This code is same as: use Time::Strptime::Format; my $format = Time::Strptime::Format->new('%Y-%m-%d %H:%M:%S', { time_zone => 'Asia/Tokyo' }); my ($epoch, $offset) = $format->parse('2014-01-01 00:00:00'); # LICENSE Copyright (C) karupanerura. This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself. # AUTHOR karupanerura