date
私は「2 時間」などの表現を 7200 などの秒数に変換しようと試みていました。次のような呼び出しでこれを実行できると思いました。
date -d "1970-01-01 00:00:00 + 2 hours" +"%s"
しかし、そうしているうちに、非常に奇妙な結果に気づきました。(私のには/etc/timezone
「Europe/Paris」が含まれているため、TZ
UTC 時間を強制するために を使用しています。)
omega:~$ TZ=utc date -d "1970-01-01 00:00:00" +"%s"
0
omega:~$ TZ=utc date -d "1970-01-01 00:00:00 + 0 minutes" +"%s"
60
omega:~$ TZ=utc date -d "1970-01-01 00:00:00 + -1 minutes" +"%s"
3660
omega:~$ TZ=utc date -d "1970-01-01 00:00:00 + 1 minutes" +"%s"
-3540
date
最初の結果は十分妥当ですが、最後の 3 つの結果がどのようにして導き出されたのか、まったく理解できません。これらの結果の論理を理解できる人はいますか?
答え1
+ x
タイムゾーン指定子としてyour が使用されていると思います(たとえば、2013-04-25 19:52:36 +4
は UTC より 4 時間進んだタイムゾーンの有効なタイムスタンプであると考えてください)。
次に、「minutes」という単語を見つけて、これを minute の同義語として扱い、1 分後の時間を表示します。
明示的なタイムゾーン指定子を入力すると、次のように動作します。
anthony@Zia:~$ TZ=utc date -d "1970-01-01 00:00:00 UTC" +"%s"
0
anthony@Zia:~$ TZ=utc date -d "1970-01-01 00:00:00 UTC + 0 minutes" +"%s"
0
anthony@Zia:~$ TZ=utc date -d "1970-01-01 00:00:00 UTC + -1 minutes" +"%s"
-60
anthony@Zia:~$ TZ=utc date -d "1970-01-01 00:00:00 UTC + 1 minutes" +"%s"
60
秒の後のフィールドに注意してくださいUTC
。秒を入力することもできます+0
。
anthony@Zia:~$ TZ=utc date -d "1970-01-01 00:00:00 +0 + -1 minutes" +"%s"
-60
...しかし、少なくとも個人的には、それは読むのがはるかに困難です。
または、秒の後に を置くこともできます。上記の例では、環境変数を UTC に設定するZ
必要はありません。TZ