DateTimeで日時やエポック秒に変換
投稿:2017-07-05
検索して見かけたこちらのページでDateTimeを使っていなかったので。
「DateTimeモジュールのinstallは依存関係が多くとても大変なのでTime::Piecesを使うと良いと思います。」
誰もが一度は陥る日付処理。各種プログラミング言語におけるDateTime型/TimeStamp型の変換方法のまとめ - Web就活日記
想像ですが「DateTime型」はISO8601を一部省略した文字列、「TimeStamp型」はエポック秒を指しているようです。
ISO 8601 - Wikipedia
UNIX時間 - Wikipedia
昔からあるCPANモジュール(サイトCPANにあるモジュール群ではなく「CPAN」という名前の依存関係を全自動で調べて一緒にインストールしてくれるモジュール)や、今時ならcpanmが便利だし、ActivePerlならPPMにお任せだよねという時代にDateTimeのインストールは楽勝だからDateTimeでどんなコードになるのだろうと思った訳です。
遊び半分で書いてる素人のスクリプトがPerl警察に検挙されそうで怖いです(笑)。
「DateTimeモジュールのinstallは依存関係が多くとても大変なのでTime::Piecesを使うと良いと思います。」
誰もが一度は陥る日付処理。各種プログラミング言語におけるDateTime型/TimeStamp型の変換方法のまとめ - Web就活日記
想像ですが「DateTime型」はISO8601を一部省略した文字列、「TimeStamp型」はエポック秒を指しているようです。
ISO 8601 - Wikipedia
UNIX時間 - Wikipedia
昔からあるCPANモジュール(サイトCPANにあるモジュール群ではなく「CPAN」という名前の依存関係を全自動で調べて一緒にインストールしてくれるモジュール)や、今時ならcpanmが便利だし、ActivePerlならPPMにお任せだよねという時代にDateTimeのインストールは楽勝だからDateTimeでどんなコードになるのだろうと思った訳です。
遊び半分で書いてる素人のスクリプトがPerl警察に検挙されそうで怖いです(笑)。
UTF-8で保存してください。
必要なモジュールはPPMとcpanmでインストールしました。
#!/usr/bin/perl -w use utf8; use warnings; use strict; use open IO => ":utf8"; use feature ":5.10"; use DateTime; use DateTime::Format::ISO8601; use Encode::Locale; binmode STDOUT, ":encoding(console_out)"; $| = 1; my $dt1= DateTime->now(time_zone => "local"); say "現在時刻 ", $dt1; say "ここのタイムゾーン ", $dt1->time_zone_long_name; say "エポック秒 ", $dt1->epoch; say ""; my $date = "2017-07-05T12:34:56"; say "読み取る文字列 ", $date; my $time_zone = "Asia/Tokyo"; say "読み取るタイムゾーン ", $time_zone; my $dt2 = DateTime::Format::ISO8601->parse_datetime($date); $dt2->set_time_zone($time_zone); say "読み取った日時 ", $dt2; say "読み取ったタイムゾーン ", $dt2->time_zone_long_name; say "エポック秒 ", $dt2->epoch; exit;
スクリプト単独ではなくperlから起動しています。
ActivePerl(Windows)とperlbrew(Linux)で同じ結果になりました。
現在時刻 2017-07-05T16:24:41 ここのタイムゾーン Asia/Tokyo エポック秒 1499239481 読み取る文字列 2017-07-05T12:34:56 読み取るタイムゾーン Asia/Tokyo 読み取った日時 2017-07-05T12:34:56 読み取ったタイムゾーン Asia/Tokyo エポック秒 1499225696