Linux "date"コマンドを使用して、6時間の1日の日付シリーズ(1日4時間ステップ)を構築します。

Linux

「N」年間、毎日6時間分の出会い系列を構成しようとしています。私はこれをしようとします

for i in {1..1825}; do 
date -d "00:00 01-01-1998 +6 hours" +"%d-%m-%Y %H:%M"
done

しかし、それは私が望むものではありません。

私の目標はこれを順番に作ることです。

01-01-1998 00:00 
01-01-1998 06:00 
01-01-1998 12:00 
01-01-1998 18:00 
02-01-1998 00:00 
02-01-1998 06:00
02-01-1998 12:00 
02-01-1998 18:00 
.
.
.etc

コマンドを使用してこれをどのようにdate実行できますか?

どんな助けでも大変感謝します。よろしくお願いします。

ベストアンサー1

夏時間を心配する必要があります。たとえば、私のタイムゾーンはカナダ/東部で、次のようになります。

$ d=$(date -d "2020-03-08 00:00:00")
$ echo $d
Sun Mar 8 00:00:00 EST 2020
$ d=$(date -d "$d + 6 hours")
$ echo $d
Sun Mar 8 07:00:00 EDT 2020
# ........^^

そして

$ d=$(date -d "2020-11-01 00:00:00")
$ echo $d
Sun Nov 1 00:00:00 EDT 2020
$ d=$(date -d "$d + 6 hours")
$ echo $d
Sun Nov 1 05:00:00 EST 2020
# ........^^

タイムゾーンにUTCを指定する必要があります。

$ d=$(date -u -d "2020-11-01 00:00:00")
$ echo $d
Sun Nov 1 00:00:00 UTC 2020
$ d=$(date -u -d "$d + 6 hours")
$ echo $d
Sun Nov 1 06:00:00 UTC 2020
# ........^^

だから:

fmt='%d-%m-%Y %H:%M'
d=$(date -u -d "1998-01-01 00:00:00")
for i in {1..1825}; do 
    # print the current date
    date -u -d "$d" "+$fmt"
    # add 6 hours
    d=$(date -u -d "$d + 6 hours")
done

ISO日付形式YYYY-mm-ddを使用することをお勧めします。これは明確な日付形式で、語彙と時系列でソートされます。

おすすめ記事