ISOフォーマット—の2つの日付(ファイルから動的に受信)を比較したいと考えています。 2011-12-14T17:22:52Z
— in Perl。どうしたらいいですか?Perlでは、ISOフォーマット(%Y-%m-%dT%H:%M:%SZ)で日付と時刻を比較するにはどうすればよいですか?
答えて
あなたが表示さISO 8601表記の大きな利点は、それが文字列の比較と比較することができるということです。
my $v1 = "2011-12-14T17:22:52Z";
my $v2 = "2012-01-03T19:13:49Z";
print "$v1 earlier than $v2\n" if $v1 lt $v2;
これは、値がすべてのズールー族の時間であると仮定し(Zは別名UTC、タイムゾーンです) 。異なるタイムゾーンを使用している場合は、単一のタイムゾーン(UTCは分かりやすい選択肢)に正規化して比較する必要があります。
注慎重用語'string comparison'。
Perlでは、<
オペレータが2つの数値を比較します。提示された値は、フック、詐欺、またはブルートフォースと無知によって数に強制されます。たとえば、if ("A" == "B")
が真であるのは、"A"
が数字として扱われるため、"B"
です。日付/時刻文字列は、数値比較を使用する場合に限り、数値が年の構成要素であるかのように扱われます。 (そのニーモニック元のFortran比較演算子に基づくかもしれない:lt
、le
、gt
、ge
、eq
、ne
及びcmp
)
文字列比較演算子が文字列を比較するために使用されます。数値を比較するには、数値比較器(<
,<=
、>
、>=
、!=
、==
および<=>
)を使用します。比較の種類を区別するように注意してください。
あなたの日付は、(質問はこれを明示的に言及しなかった)同じ時間帯に必ずしもないている場合は、解析すると、日付文字列を自分で計算するよりも、専用の日付&時間モジュールを使用したほうが良いと思います。比較は文字列ベースの答えで文字列比較とは異なり、2つのオブジェクト間の数値比較を使用していることを
use DateTime::Format::ISO8601;
my $dt1 = DateTime::Format::ISO8601->parse_datetime('2011-12-14T17:22:52Z');
my $dt2 = DateTime::Format::ISO8601->parse_datetime('2011-12-14T17:22:52+01:00');
if ($dt1 < $dt2) {
print "$dt1 is first\n";
} else {
print "$dt2 is first\n";
}
注:ここではDateTimeとDateTime::Format::ISO8601モジュールを使用した例です。これは、DateTime
が比較演算子と文字列補間 "演算子"にオーバーロードしているために機能します。
この問題を見る一つの方法は、サンプル日付が含まれていることです'Z'(ズールー時間、またはUTC)のタイムゾーンの指定、そしてそれがテクノグークでない限り人々によって通常使用されないためです。私は時々それを使用する)、日付は(おそらく)すべての同じ時間帯にあり、そのタイムゾーンはUTCです。それにもかかわらず、時間帯が異なる場合、単純な文字列の比較は不十分です。たとえば、 '2015-01-01T04:30:00 + 12:00'は' 2014-12-31T14:28:00-08:00'より前です - 前者は '2014-12-31T20:30: 00Z」、後者は「2014-12-31T22:28:00Z」となる。これを処理するパッケージを使用することは合理的です。 –
- 1. 日付と時刻とperlでの時刻を比較する
- 2. PHPで日付をY-m-d形式で比較するには?
- 3. バッシュ・ループ日時+%Y-%m-%d%H:%M形式
- 4. VS2010 Report Designer:RDLCでintを(x)d、(y)h、(z)mにフォーマットする
- 5. 日付形式をd/m/y時間からd/m/yに変換する
- 6. 日付時刻をフォーマットするにはどうすればいいですか?
- 7. 日時の奇妙な動作:エラー:時刻データ '0'はフォーマット '%d%b%Y:%H:%M:%S'と一致しません
- 8. デフォルトの日付形式を%Y%m%d%H%M%Sに変更します
- 9. 日付文字列がd-m-YまたはY-m-dにないd/m/Y形式であるかどうかを確認する方法
- 10. 日付+時刻と現在の日付と時刻を比較するには?
- 11. 日付と時刻を比較する
- 12. PHPで日付( 'Y-m-d')を使用するときの時刻を正しく設定する方法は?
- 13. xslで数値を日付/時刻形式にフォーマットするにはどうすればよいですか?
- 14. 日付形式%Y-%mの時系列
- 15. jQueryテンプレートで日付/時刻をフォーマットするにはどうすればよいですか?
- 16. PHPでこの時刻/日付をフォーマットするにはどうすればよいですか?
- 17. ValueError:時刻データ '1/1/2016 00:09:55'は '%m /%d /%y%H:%M:%S'と一致しません。
- 18. フォーマットの日付がY-mのデータベースからの2つの文字列を比較するLaravelクエリ
- 19. HIVE - date_format(your_date_column、 '%Y-%m-%d%H')
- 20. 2つの日付の時刻ではなく、日付の部分だけを比較するにはどうすればよいですか?
- 21. Pythonを使用して日付をISOでフォーマットするにはどうすればよいですか?
- 22. タイムゾーンでJavaScript日付をJava日付時刻に変換するにはどうすればよいですか?
- 23. PHPは日付から1ヶ月を日付で区切ります( 'm-Y')
- 24. Pythonで複数のファイルを現在の%Y%m%d%H%M%Sでunixエポック時間に変更する
- 25. 比較日付時刻
- 26. SQLの時刻と現在の日付と時刻をTSで比較する
- 27. PHPで(M-d、D)を(Y-m-d)に変換するには?
- 28. jqueryで日付を "Y-m-d"形式に変換する
- 29. C#で時刻と日付を比較する
- 30. フォーマットが "%Y%m%d%H%M%S"のmutate内で使用するためのR strptime相当
ありがとうジョナサン・レフラー!!!それは働いた.... – SWN
Nit: "t"と "T"の両方が許可され、 "z"と "Z"の両方が許可されているので、それらを比較する前に文字列を 'uc'する必要があります。 – ikegami
注:特定の形式はRFC 3339と呼ばれます。Atomは大文字の "T"と "Z"のみを許可する点を除いて、Atom(他の中でも使用されます)によって使用されます。 DateTimeのパーサーとフォーマッタ:[DateTime :: Format :: RFC3339](http://search.cpan.org/perldoc?DateTime::Format::RFC3339)、[DateTime :: Format :: Atom](http: /search.cpan.org/perldoc?DateTime::Format::Atom) – ikegami