「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を使用することをお勧めします。これは明確な日付形式で、語彙と時系列でソートされます。