次のコマンドを実行しようとすると、正しい出力が表示されます。
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’
最初の部分を考えるのに1ヶ月かかるからですか?この状況をどのように処理するのですか%s
?
これは29日が月であり、日付が無効と見なされるためです。 dd-mm-yyyy hh:mm:ssを別の日付形式に変換して%sを追加して秒を取得する方法はありますか?どんな提案でもお願いします
ベストアンサー1
(GNU)デフォルトの入力形式date
はEメール日付形式です(読み取りRFC5322)。この形式はもともと以下で定義されていました。RFC-822のようにdd mmm yy
。ただし、mmm
3文字(英語)の月名を示します。拡張機能として、ほとんどのdate
プログラムでは数字mm/dd/yyyy
(月から)も受け入れます。POSIX日付で定義されているものと似ています。mmddhhmm[[cc]yy]
Ubuntu(オペレーティングシステム)では、デフォルトはdate
GNU Dateであり、このmm/dd/yyy
形式が必要です。現在、他の形式を定義する方法はありません(GNU coreutils 8.32)。
busyboxで利用可能な日付を使用して一般的な形式を解析できます。-D
Ubuntuにsudo apt-get install busybox
busyboxをインストールするために使用(後)します。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'
エポック以降の秒数がわかります。これは UTC 時間ではなく IST 時間を提供します。
$ 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
-j
一部のBSD日付実装では、および-f
オプションを使用できます。同様の結果。
$ date -j -f "%d/%m/%Y %T" "04/1/2022 7:1:00" +"%s"
1641259860