GNU/Linux >> Linux の 問題 >  >> Linux

Coreutilの日付はどのようにしてそのような奇妙な結果を得ることができますか?

dateで遊んでいました 「2時間」などの式を7200などの秒数に変換しようとします。これは、次のような呼び出しで実行できると思いました。

date -d "1970-01-01 00:00:00 + 2 hours" +"%s"

それでも、そうしている間、私は非常に奇妙な結果に気づきました。 (私の/etc/timezone 「ヨーロッパ/パリ」が含まれているため、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つの結果を思いついたかもしれません。誰かがそれらの結果の間の論理を理解していますか?

承認された回答:

+ xが必要だと思います タイムゾーン指定子として(例:2013-04-25 19:52:36 +4 UTCの4時間前のタイムゾーンでの有効なタイムスタンプです。

次に、「分」という単語が表示され、それが分の同義語として扱われるため、1分後に表示されます。

明示的なタイムゾーン指定子を入力すると、次のように機能します。

[email protected]:~$ TZ=utc date -d "1970-01-01 00:00:00 UTC" +"%s"   
0
[email protected]:~$ TZ=utc date -d "1970-01-01 00:00:00 UTC + 0 minutes" +"%s"
0
[email protected]:~$ TZ=utc date -d "1970-01-01 00:00:00 UTC + -1 minutes" +"%s" 
-60
[email protected]:~$ TZ=utc date -d "1970-01-01 00:00:00 UTC + 1 minutes" +"%s" 
60

UTCに注意してください 秒フィールドの後。 2番目の+0を入力することもできます :

[email protected]:~$ TZ=utc date -d "1970-01-01 00:00:00 +0 + -1 minutes" +"%s"
-60

…しかし、少なくとも個人的には、それははるかに読みにくいです。

または、Zを配置することもできます 秒後など。実際にはTZは必要ありません。 上記の例でUTCに設定される環境変数。


Linux
  1. bashで2つの日付の違いを取得するにはどうすればよいですか

  2. Bash/Debianでファイル作成日時を取得するには?

  3. Linux はどのようにプロセス間で帯域幅を割り当てますか?

  1. Linuxでタイムゾーンを確認する方法

  2. Linuxファイル機能を管理する方法

  3. Lsのある日付の後に作成されたファイルのみを取得するにはどうすればよいですか?

  1. Pythonでフォーマットされた日時を取得する方法

  2. CPU使用率を取得する方法

  3. psを印刷グループにするにはどうすればよいですか?