2017-10-15 14 views
2

私は同じ日に00:00から23:59までの期間に顧客からの情報のダウンロードを自動化するスクリプトを作成しています。夏時間の最初の日(10/15/2017、私のタイムゾーン - BRST)を正しく処理するために、前日のタイムゾーンを確認する必要があります。しかし、ときに私はシェルスクリプトの無効な日付から日を引く方法は?

date --date="20171015 01:00 -1 day" +%Y-%m-%d 

結果は次の日2017-10-16、ない前日2017-10-14で、最初の有効時間から1日を減算します。誰かが私が間違っていることを理解するのを助けることができますか?この操作を正しい方法でどうすればいいですか?

+0

に固執するあなたは、 'TZ ='のenv VARについて知っていますか?あなたのシステムがそれをどのように使用しているのかを 'man date'で確認してください(あなたの場合に役立つかもしれません)。がんばろう。 – shellter

+0

日付演算が薄れてしまいます。私は様々な日に「01:00 -1時」を試し、前日には23時に一貫していました。 – chepner

答えて

2

GNU dateの算術は本当に信頼できません。代わりに、私はあなたの開始時間をUNIXの時代から秒に変換し、86400秒を減算し、結果を1日に戻します。これらの変換ルーチンは、夏時間を考慮に入れます。

$ TZ=BRST date +%s --date "20171015 01:00" 
1508029200 
$ TZ=BRST date +%F-%T --date @$((1508029200 - 86400)) 
2017-10-14-01:00:00 
+0

こんにちは、@chepner!このアプローチは私のために働いた。どうもありがとうございました! – mari

0

"BRST" タイムゾーンは非常に便利ではありません表示されます。オルソンタイムゾーン名

$ TZ=BRST date --date="20171015 00:30" "+%F %T" 
2017-10-15 00:30:00 

$ TZ=America/Sao_Paulo date --date="20171015 00:30" "+%F %T" 
date: invalid date ‘20171015 00:30’ 
関連する問題