2014-04-04 70 views
1

我們在Bash中的時間計算有一個小問題。在bash中的時間計算

讓我們稍微解釋一下這裏的情況。

我們從FTP服務器每隔5分鐘下載一個文件。該文件包含有關此文件中數據的時間信息。但是文件的時間格式是UTC,而我們的本地時間是UTC + 2。這些文件包含有關當地時間過去5分鐘的信息。現在我們有以下代碼:

TIMESTAMP=$(echo "$(TZ=UTC date "+%Y%m%d%H%M") - ($(date +%M)%5)-5" | bc) 

這樣可以很好地工作幾個小時,但55分鐘後就成了問題。所以我們不能在55分鐘,60分鐘的時間內獲得文件。

所以,如果本地時間爲:19:47 隨着時間17:40(UTC)的文件在服務器上可用19:45當地時間

的時間可使用這些文件在服務器上不恆太糟糕了...... 19:00,19:05,19:10等等,但有時該文件是一分鐘後....

這是我的crontab文件:

SHELL=/bin/sh 
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/home/kbroeren/cronscripts 
*/1 * * * * /home/kbroeren/cronscripts/radar >> /home/kbroeren/radar_log.txt 2>&1 
*/5 * * * * sudo /usr/bin/python /home/kbroeren/cronscripts/radar_plot.py >>/home/kbroeren/out.txt 2>&1 

有沒有更好更正確的方法來做到這一點?

+0

我不會試圖去猜測服務器的文件名是什麼。我會查找服務器上的最新文件,看看你是否已經下載了它。另外,您應該期望本地計算機上的時鐘可能與遠程服務器上的時鐘不同步。 –

回答

0

你似乎在尋找%s

date +%s 

這將返回:

%s  seconds since 1970-01-01 00:00:00 UTC 

你需要改變算術一點,雖然。

+0

謝謝,但我們不使用秒,這是從數據文件的示例文件名:201404041740.h5 – user3408380

+0

@ user3408380 _filename_與日期計算有什麼關係? – devnull

+0

我們估計下載文件之前的文件名,因爲ftp服務器上有大約200個文件,我們想要獲得最新的,正確的文件。 – user3408380

0

date命令可以轉換爲一定數量的日期和時間格式。如果你想用日期和時間進行算術運算,最簡單的辦法就是轉換爲「自UNIX時代以來的秒數」,進行算術運算並將其轉換回您選擇的時間格式。

你可能會考慮這樣的:

date --date="@$(echo $(TZ=UTC date +%s) - $(date +%s)'%(5*60)-(5*60)' | bc)"