Linux

嘗試使用 %s 獲取從紀元到當天的秒數,獲取無效日期

  • April 15, 2022

當我嘗試執行以下命令時,我得到了正確的輸出

date --date="04/1/2022 7:1:00" +'%s'

output: 1648776660

但是,當嘗試使用不同的日期(2022 年 1 月 29 日)執行相同的命令時,它會顯示無效日期:

date --date="29/1/2022 7:1:00" +'%s'

error:   date: invalid date ‘29/1/2022 7:1:00’

是因為第一部分被認為是一個月嗎?那這種情況怎麼處理%s

因為它認為 29 日為一個月並獲得無效日期。有什麼方法可以從 dd-mm-yyyy hh:mm:ss 轉換為任何其他日期格式,以便我可以添加 %s 並獲取秒數?請有任何建議

(GNU) 的預設輸入格式date是電子郵件日期格式(請閱讀RFC5322)。該格式最初在RFC-822中定義為dd mmm yy. 但mmm表示 3 個字母(英文)的月份名稱。作為擴展,大多數date程序也接受數字mm/dd/yyyy (月份在前)。類似於 POSIX 日期中定義的內容:mmddhhmm[[cc]yy]

在 Ubuntu(你的作業系統)中,預設date是 GNU 日期,它需要mm/dd/yyy格式。目前沒有定義其他格式的方法(GNU coreutils 8.32)。

您可以-D在busybox日期中使用available來解析通用格式:在Ubuntu中安裝busybox with sudo apt-get install busybox(after )。sudo apt-get update -y

$ busybox date -D '%d/%m/%Y %H:%M:%S' --date='04/1/2022 7:1:00'
Tue Jan  4 07:01:00 IST 2022

假設您在印度(IST 時間或 +5:30)。

當然,指定輸出格式+'%s'將為您提供自紀元以來的秒數。請注意,這將為您提供 IST 的時間,而不是 UTC。

$ busybox date -D '%d/%m/%Y %H:%M:%S' --date='04/1/2022 7:1:00 +0530' +'%s'
1641259860

$ date -ud @1641259860
Tue 04 Jan 2022 01:31:00 AM UTC

注意時間是不同的!

對於其他所有人(不是印度時間),該結果可以通過以下方式複制:

$ TZ='Asia/Kolkata' busybox date -D '%d/%m/%Y %H:%M:%S' --date='04/1/2022 7:1:00' +'%s'
1641259860

在一些 BSD 日期實現​​中,我們可以使用-j-f選項來獲得類似的結果

$ date -j -f "%d/%m/%Y %T" "04/1/2022 7:1:00" +"%s"
1641259860

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