Linux
嘗試使用 %s 獲取從紀元到當天的秒數,獲取無效日期
當我嘗試執行以下命令時,我得到了正確的輸出
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 withsudo 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