2016-10-17 8 views
4

1か月間にすべての分を繰り返したい(目的はCSVファイルを生成することになる)。ループ分とbashによるエコー

しかし、私はこのしようとすると:

d="2016-09-01 00:00:00" 
while [ "$d" != "2016-09-30 00:00:00" ]; do 
echo $d 
d=$(date --utc "+%Y-%m-%d %H:%M:00" -d "$d + 1 minute") 
done 

を時間と分の両方がインクリメントされています:

2016-09-01 00:00:00 
2016-09-01 01:01:00 
2016-09-01 02:02:00 
2016-09-01 03:03:00 
2016-09-01 04:04:00 
2016-09-01 05:05:00 
2016-09-01 06:06:00 
2016-09-01 07:07:00 
2016-09-01 08:08:00 

私が間違って何をやっているとどのように正しくループ分?

+0

、私はこのコードを実行すると、分*が減少する間に*時間が減少します。あなたは何タイムゾーンですか?私は '--utc'が出力にのみ適用され、日付の算術には適用されないと考えています。 – chepner

+0

ええ+記号は人々の考え方には作用しません。単に「+分」または「分」だけ、「+ 1」だけを試してください。 '+'は時間にオフセットを加えます。 '$ d 10 minutes'の後にインクリメントを入れるだけで '+'を使わないでください – 123

答えて

0

代わりに私はUnixのタイムスタンプで動作します。

d=$(date --utc +%s -d "2016-09-01 00:00:00") 
end=$(date --utc +%s -d "2016-09-30 00:00:00") 
while [ "$d" != "$end" ]; do 
    date --utc "+%Y-%m-%d %H:%M:00" -d "@$d" 
    d=$((d + 60)) 
done 
0

あなたは正しい出力を得るために$d変数あなたの日付文字列の後にタイムゾーンUTCを追加することができます。

d="2016-09-01 00:00:00" 
for ((i=0; i<=60; i++)); do 
    date --utc -d "$d UTC + $i minute" 
done 

Thu Sep 1 00:00:00 UTC 2016 
Thu Sep 1 00:01:00 UTC 2016 
Thu Sep 1 00:02:00 UTC 2016 
Thu Sep 1 00:03:00 UTC 2016 
Thu Sep 1 00:04:00 UTC 2016 
Thu Sep 1 00:05:00 UTC 2016 
... 
... 
Thu Sep 1 00:55:00 UTC 2016 
Thu Sep 1 00:56:00 UTC 2016 
Thu Sep 1 00:57:00 UTC 2016 
Thu Sep 1 00:58:00 UTC 2016 
Thu Sep 1 00:59:00 UTC 2016 
Thu Sep 1 01:00:00 UTC 2016 

UTCの注意使用$d後に。

0

+を使用すると、日付文字列の時間成分が、 'time zone correction'に使用された後に、何をしたいのか分からないことがあります。興味深いことに、日付と時刻を反転して動作します:

$ date "+%Y-%m-%d %H:%M:00" -d "21:31:00 2016-09-03 + 1 minute " 
2016-09-03 21:32:00 

を結果は、ローカル設定に依存する場合がありますので、他の方法は、周りのタイムゾーンやオフセットを台無しながら:

興味深いことに
$ TZ=Europe/London date "+%Y-%m-%d %H:%M:00" -d "2016-09-03 21:32:00 + 1 minute " 
2016-09-03 21:33:00 
$ TZ=Europe/Brussels date "+%Y-%m-%d %H:%M:00" -d "2016-09-03 21:32:00 + 1 minute " 
2016-09-03 22:33:00 
$ TZ=Asia/Singapore date "+%Y-%m-%d %H:%M:00" -d "2016-09-03 21:32:00 + 1 minute " 
2016-09-04 04:33:00 
関連する問題