Command-Line

如何將日期時間轉換為紀元?

  • September 7, 2021

我已經看到,為了將紀元轉換為日期時間,可以執行以下操作:

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

我如何在 Linux 中做相反的事情?IE 將 20191027163020 轉換為紀元值?是否可以不使用 Python 或其他程式語言腳本?

Linux只是一個核心,它與 Q&A 無關。

使用busybox 實現dateGNUdate也在考慮實現類似的選項;GNU 和busyboxdate是在使用Linux 作為核心的系統上常見的兩種實現,我知道它們支持您的date -d @xxx語法)。

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

使用 ast-open 實現date(就像date作為 ast-open 的一部分建構的 ksh93 的內置函式):

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

strftime內置zsh:_

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

使用目前版本的 GNU date,您可以將其轉換為它支持-d/的格式-f(如2019-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,因為時鐘在切換到冬季時間後以一小時的間隔顯示兩次 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為)。

引用自:https://unix.stackexchange.com/questions/549148