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. VS2010 Report Designer:RDLCでintを(x)d、(y)h、(z)mにフォーマットする
- 2. デフォルトの日付形式を%Y%m%d%H%M%Sに変更します
- 3. 日付と時刻を比較する
- 4. PHPでこの時刻/日付をフォーマットするにはどうすればよいですか?
- 5. jQueryテンプレートで日付/時刻をフォーマットするにはどうすればよいですか?
- 6. 比較日付時刻
- 7. 2つの日付の時刻ではなく、日付の部分だけを比較するにはどうすればよいですか?
- 8. タイムゾーンでJavaScript日付をJava日付時刻に変換するにはどうすればよいですか?
- 9. Pythonを使用して日付をISOでフォーマットするにはどうすればよいですか?
- 10. 日付を逆順(d、m、y)で表示しますか?
- 11. Mysqlの注文日時m/h/s
- 12. デバイスの日付と時刻が正確でない場合、実際の日付と時刻を取得するにはどうすればよいですか?
- 13. Dartで日付をフォーマットするにはどうすればよいですか?
- 14. NSDateFormatで日付をフォーマットするにはどうすればよいですか?
- 15. SQL Serverで時刻を比較するにはどうすればよいですか?
- 16. はY/M/DのHを変換する:私は、PHP
- 17. どのように.hと.mにストーリーボードを接続する
- 18. m/d/yをBigQueryタイムスタンプに変換するにはどうすればよいですか?
- 19. 日付時刻フィールドで時間をフィルタリングするにはどうすればよいですか?
- 20. Androidで日付と時刻を読み取り、解析するにはどうすればよいですか?
- 21. Perlで相対日付と近似日付を作成するにはどうすればよいですか?
- 22. perlとphpの日付と時刻に基づいて2つの文字列を比較するには?
- 23. 日付をフォーマットするにはどうすればよいですか?
- 24. この日付をフォーマットするにはどうすればよいですか?
- 25. Calendarの時刻をjava.sql.Timeオブジェクトと比較するにはどうすればいいですか?
- 26. 「MM/DD/YYYY」日付とJavascriptのDate()関数を比較するにはどうすればよいですか?
- 27. java日付時刻比較2
- 28. 日時フィールド間の経過時間を比較するにはどうすればよいですか?
- 29. JavaのJoda日付/時刻ライブラリを使用して、「今日」の日付/時刻範囲を取得するにはどうすればよいですか?
- 30. EFクエリで日付比較を実行するにはどうすればよいですか?
ありがとうジョナサン・レフラー!!!それは働いた.... – 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