DateTime
Perlモジュール、および多くの DateTime::Format::
特定の種類の日付/時刻形式を解析するモジュール。しかし、日付/時刻文字列のいくつかの例を考えると、どの特定のモジュールを使用する必要がありますか(コーディング/設計時、not実行時) ?
たとえば、次のような文字列を解析したい:October 28, 2011 9:00 PM PDT
これを調べて、どちらが最も適切なモジュールであるかを見つけることができる最も一般的な日付/時刻形式のリストはありますか?
また、実行時に指定された各文字列の形式を「推測」し、最善を尽くすモジュールをいくつか知っています。ただし、機密性の高いアプリケーションの場合、アプリケーションを設計するときに最初に(可能な限り厳密に)形式を決定し、次に文字列が指定された形式に一致しない場合に警告するモジュールを使用します。
これについてどうすればいいですか?
DateTime :: Format :: Strptime は、日付/時刻文字列を取得し、DateTimeオブジェクトに解析します。
#!/usr/bin/Perl
use strict;
use warnings;
use DateTime::Format::Strptime;
my $parser = DateTime::Format::Strptime->new(
pattern => '%B %d, %Y %I:%M %p %Z',
on_error => 'croak',
);
my $dt = $parser->parse_datetime('October 28, 2011 9:00 PM PDT');
print "$dt\n";
パターンで使用される文字シーケンスはPOSIX標準です。詳細については、「man strftime」を参照してください。
Time :: Piece を使用する傾向があるのは、単にバージョン 5.1 以降の標準Perlモジュールセットの一部だからです。
日付文字列の解析 の機能に勝るものはありません。
my $time = Time::Piece->strptime(
"October 28, 2011 9:00 PM PDT",
"%B %d, %Y %r %Z");
_Date::Parse
_モジュール、つまりstr2time()
関数を見てください。一般的に使用されるほとんどの形式をサポートしています。
例:
_use Date::Parse;
use DateTime;
my $str = "Tue, 20 Sep 2011 08:51:08 -0500";
my $Epoch = str2time($str);
my $datetime = DateTime->from_Epoch(epoch => $Epoch);
_
一般的な日付/時刻形式を探している場合は、 DateTime :: Locale を参照してください。
use DateTime::Locale
my $locale = DateTime::Locale->load('DE_de');
次のメソッドは、DateTime-> format_cldr()メソッドに適した文字列を返します。
$locale->date_format_full() $locale->date_format_long() $locale->date_format_medium() $locale->date_format_short() $locale->date_format_default() $locale->time_format_full() $locale->time_format_long() $locale->time_format_medium() $locale->time_format_short() $locale->time_format_default() $locale->datetime_format_full() $locale->datetime_format_long() $locale->datetime_format_medium() $locale->datetime_format_short() $locale->datetime_format_default()
DateTime :: Format :: CLDR モジュールで日付を解析できます
use DateTime::Format::CLDR;
# 1. Basic example
my $cldr = DateTime::Format::CLDR->new(
pattern => 'dd.MM.yyyy HH:mm:ss',
locale => 'de_DE',
time_zone => 'Europe/Berlin',
);
my $dt = $cldr->parse_datetime('26.06.2013 11:05:28');