%sを使用してepochから現在の日付までの秒数を取得しようとしましたが、日付が無効です。

%sを使用してepochから現在の日付までの秒数を取得しようとしましたが、日付が無効です。

次のコマンドを実行しようとすると、正しい出力が表示されます。

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。ただし、mmm3文字(英語)の月名を示します。拡張機能として、ほとんどのdateプログラムでは数字mm/dd/yyyy (月から)も受け入れます。POSIX日付で定義されているものと似ています。mmddhhmm[[cc]yy]

Ubuntu(オペレーティングシステム)では、デフォルトはdateGNU Dateであり、このmm/dd/yyy形式が必要です。現在、他の形式を定義する方法はありません(GNU coreutils 8.32)。

busyboxで利用可能な日付を使用して一般的な形式を解析できます。-DUbuntuにsudo apt-get install busyboxbusyboxをインストールするために使用(後)します。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

おすすめ記事