2011-07-11 8 views

答えて

4
use DateTime::Format::Strptime qw(); 

my $time_str = 'Mon, 11 Jul 2011 11:45:07 +08:00'; 
# your notation of time zone 
# does not comply with relevant standards 
$time_str =~ s/([+-]\d\d):(\d\d) \z/$1$2/msx; # kill colon 

my $parser = DateTime::Format::Strptime->new(
    pattern => '%a, %d %b %Y %T %z', 
    locale => 'en', # 'Mon', 'Jul' are English 
    on_error => 'croak', 
); 

my $datetime = $parser->parse_datetime($time_str); 

# Now you have a DateTime object. To compare, 
# use the overloaded relation operators. 
# <=> operator/sort function works as well. 

if ($datetime < $a_different_datetime) { 
    say 'earlier'; 
} 
1

PHPの場合、最も簡単な方法は、strtotime()で時間文字列を変換し、整数値を比較することです。最も高い整数が最新です。

デフォルトのタイムゾーンを設定していない場合、PHPのバージョンによってはDate関数を使用する際に警告が表示されることに注意してください。 またはphp.iniのdate.timezone = ""で、list of supported timezonesとすることができます。

+0

-1投機的な答えを。警告メッセージで5.3.5の爆弾を試す 'システムのタイムゾーン設定に頼るのは安全ではない。 [...] 'などです。表示されないタイムゾーン解析を処理するために必要なコードが増えています。私はこれが実際にはPHPの標準ライブラリでカバーされているとは思わない。 – daxim

+0

この警告は、日付変換にデフォルトのタイムゾーン設定を使用していることを説明するだけです。これはタイムゾーンが明示的に文字列に与えられているので、問題の変換にはほとんど関係ありません。システムのタイムゾーンが入力として与えられると、どうして問題になるのですか?私はあなたの前でPHP 5.3.5を尋ねなければならないと思います。私のPHPは、適切なPHPインストールのように、設定の一部として設定されている可能性があります。私の答えには、PHPのインストールを実際に設定することを前提としている点を除いて、何も投機的ではありません。 – Naltharial

+0

申し訳ありませんが、それは私の批判を無効にします。私の投票を変更できるようにあなたの答えを編集してください。おそらくコードサンプルを追加し、結合モードを変更するでしょうか? – daxim

0

strtotime()と呼ばれていますあなたが持っているタイムスタンプ上のstrtotime()を試すことができます。通常のコンパレータを使って数値を比較するだけです。

1

私はこのためにPerlでDate::Manipを使用します。

use Date::Manip; 

my $datestr1 = "Mon, 11 Jul 2011 11:45:07 +08:00"; 
my $datestr2 = "Mon, 18 Jul 2011 11:45:07 +08:00"; 

my $date1 = new Date::Manip::Date; 
my $date2 = $date1->new_date; 
$date1->parse($datestr1); 
$date2->parse($datestr2); 

my $result = $date1->cmp($date2); # => -1, 0, 1 

print $result, "\n"; 
関連する問題