2001年1月1日00:00以降に経過した秒数をbashから人が読める日付に変換するにはどうすればよいですか?

2001年1月1日00:00以降に経過した秒数をbashから人が読める日付に変換するにはどうすればよいですか?

たとえば、Swiftは次のことを行います。

let date = Date(timeIntervalSinceReferenceDate: 500000)
print(date) 

取得するには:

2001-01-06 18:53:20 +0000

ベストアンサー1

Unix Epoch は 2001-01-01 00:00:00 UTC ではなく 1970-01-01 00:00:00 UTC なので、使用可能なツール (gnu date コマンドなど) は 2 時間の間の秒数だけを提供する必要があります。組み込み変換機能は結果の実際のデータを提供します。

$ seconds=500000
$ TZ=UTC date --iso-8601=s -d @$(( $(date +%s -d '2001-01-01T00:00:00+00') + $seconds ))
2001-01-06T18:53:20+00:00

修正する:(コメントをくれた@Kusalanandaに感謝します。)実際にUnix Epochは言及する必要さえありません。これは、GNU dateコマンドが与えられた日付に直接時間オフセットを追加できるようにするためです。正しい単位サフィックスが必要です(ここseconds)。これにより、コマンドが簡単になり、より一般的で読みやすくなります。

$ seconds=500000
$ TZ=UTC date --iso-8601=s -d "2001-01-01T00:00:00+00 + $seconds seconds"
2001-01-06T18:53:20+00:00

OPの出力とまったく同じ出力形式を出力するには、次のよう--iso-8601=sに置き換えます。'+%F %T %z'

上記のコマンドは、次のオプションとパラメータを使用します。

  • -d:現在の日付の代わりに与えられた日付を使用します。時間オフセットの追加を含めることができます。
  • --iso-8601=sISO形式は、次のようにスペースを送受信するのと似ています。+%F %T %z説明が必要です。ここで、%z は UTC からの時間帯オフセットであり、強制によりここでは+Y-%m-%d %H:%M:%S %z+0000 になります。TZ=UTC

おすすめ記事