日付/時刻をエポックに変換するには?

日付/時刻をエポックに変換するには?

時代を日付/時刻に変換するには、次のことができることを確認しました。

date -d  @1346338800 +'%Y%m%d%H%M%S'

Linuxでは、どのようにその逆を実行できますか? IE 20191027163020をエポック値に変換しますか? Pythonや他のプログラミング言語スクリプトを使用せずに実行できますか?

ベストアンサー1

Linuxコアだけがあり、Q&Aとは関係ありません。

busyboxを介して実装されましたdateGNUはdate同様のオプションの実装も検討しています。; GNUとbusyboxは、dateLinuxをカーネルとして使用するシステムの2つの一般的な実装であり、あなたの構文をサポートしていることdate -d @xxxを知っています。

$ date -D %Y%m%d%H%M%S -d 20191027163020 +%s
1572193820

ast-openを使用して実装されていますdatedateast-openの一部として構築されている場合は組み込みksh93と同じです):

$ date -p %Y%m%d%H%M%S -d 20191027163020 +%s
1572193820

組み込みstrftimezsh

$ zmodload zsh/datetime
$ strftime -r %Y%m%d%H%M%S 20191027163020
1572193820

現在のバージョンのGNUを使用すると、/supported形式(たとえば)dateに変換できます。-d-f2019-10-27T16:30:20

t=20191027163020
printf '%s%s-%s-%sT%s:%s:%s\n' $(printf '%s\n' "$t" | fold -w2) |
  date -f - +%s

すべて現地時間で動作します。タイムゾーンオフセットがフォーマットに含まれていないため、あいまいです。

たとえば、英国本土では、20191027011200が1572138720または1572135120である可能性があります。なぜなら、冬時間に切り替えると、時計は1時間間隔で2回01:12:00を表示するからです。

$ date -d @1572138720 +%Y%m%d%H%M%S
20191027011200
$ date -d @1572135120 +%Y%m%d%H%M%S
20191027011200

この問題を回避するには、常にUTC時間を使用することをお勧めします($TZ環境変数をに設定するなど)。UTC0

おすすめ記事