DateTimeの使用例
投稿:2018-08-04
きっかけはブログ主のツイートです。
WindowsでDateTimeでtime_zoneにlocalを指定するにはDateTime::TimeZone::Local::Win32のインストールが必要です。
困った事にプラグイン的に使われるモジュールだからインストールなしでコンパイル成功してしまいます。
そして実行中にDateTimeのコンストラクタで失敗して出てくるメッセージでは対策(モジュールのインストール)が分からないという難易度の高さです。
DateTime::TimeZone::Local::Win32 - Determine the local system's time zone on Windows - metacpan.org
DateTime::TimeZone::Local::Win32 - Determine the local system's time zone on Windows - metacpan.org
ああDateTime便利だなあ。
#!/usr/bin/env perl -w use utf8; use strict; use warnings; use open IO => ":utf8"; use Data::Dumper; use DateTime::Format::Strptime; use Encode::Argv; use Encode::Locale; binmode STDIN, ":encoding(console_in)"; binmode STDOUT, ":encoding(console_out)"; binmode STDERR, ":encoding(console_out)"; $| = 1; for (qw / 201808 201809 201802 202002 /) { print "ケース:$_\n"; my $spred = month_spread($_); print Dumper $spred; } exit; sub month_spread { my ($ym) = @_; my $i_dt = DateTime::Format::Strptime->new( pattern => "%Y%m", time_zone => "local", # Windows下はDateTime::TimeZone::Local::Win32必要 )->parse_datetime($ym); my $next_month_dt = $i_dt->clone->add(months => 1); my @result; for (; $i_dt->compare($next_month_dt) < 0; $i_dt->add(days => 1)) { push @result, $i_dt->strftime("%Y%m%d"); } return \@result; }
WindowsとCentOSで確認しました。
ケース:201808 $VAR1 = [ '20180801', '20180802', '20180803', '20180804', '20180805', '20180806', '20180807', '20180808', '20180809', '20180810', '20180811', '20180812', '20180813', '20180814', '20180815', '20180816', '20180817', '20180818', '20180819', '20180820', '20180821', '20180822', '20180823', '20180824', '20180825', '20180826', '20180827', '20180828', '20180829', '20180830', '20180831' ]; ケース:201809 $VAR1 = [ '20180901', '20180902', '20180903', '20180904', '20180905', '20180906', '20180907', '20180908', '20180909', '20180910', '20180911', '20180912', '20180913', '20180914', '20180915', '20180916', '20180917', '20180918', '20180919', '20180920', '20180921', '20180922', '20180923', '20180924', '20180925', '20180926', '20180927', '20180928', '20180929', '20180930' ]; ケース:201802 $VAR1 = [ '20180201', '20180202', '20180203', '20180204', '20180205', '20180206', '20180207', '20180208', '20180209', '20180210', '20180211', '20180212', '20180213', '20180214', '20180215', '20180216', '20180217', '20180218', '20180219', '20180220', '20180221', '20180222', '20180223', '20180224', '20180225', '20180226', '20180227', '20180228' ]; ケース:202002 $VAR1 = [ '20200201', '20200202', '20200203', '20200204', '20200205', '20200206', '20200207', '20200208', '20200209', '20200210', '20200211', '20200212', '20200213', '20200214', '20200215', '20200216', '20200217', '20200218', '20200219', '20200220', '20200221', '20200222', '20200223', '20200224', '20200225', '20200226', '20200227', '20200228', '20200229' ];