0
我有一個包含兩列的表格:年份和日期。我想將它們隱蔽到日期(年,月,日)在bash中從年份和日期轉換爲日期
下面的命令似乎僅一年正確讀取,但今年不是一天:
date -j -f "%Y %j" "2005 241" +%F
2005-02-03
我使用bash的操作系統上十,有何建議?
解決方案
$ yyyy="2015"; doy="241"; echo $(date -jf %s $(($(date -jf "%F %T" "$yyyy-01-01 23:59:30" +%s) + ((10#$doy - 1)) * 86400)) +"%F %T")
2015-08-29 23:59:30
$ date -j 082923592015 +%j
241
所以基本上,我們採取定年及構造時間爲當年(即1月1)的第一天,並將其轉換爲秒。然後,我們添加自一年第一天以來的總秒數(謹慎在這裏!因爲計數指的是01年1月,我們必須減去一秒)。以秒錶示的結果總和最終轉換爲預期格式。
- -j不設置日期
- -f允許指定輸入格式
- +允許自1970年來指定輸出格式
- %S秒-01-01 00:00:00 UTC
- %F日期格式與%Y-%m-%d相同
- %T時間格式相同%H:%M:%S
- 引用%j天年爲3位數字(例如,001 ... 366)
- $(( ))設置算術語境
- 10#。轉換爲數字,以避免在今年的一天,前導零的問題,爲10進制(例如,009,099)
@Inian我已經添加在Mac的慶典 –
@Hauri這樣做的方式:如果您在GNU 運行反向命令'日期-d 20150830 +%j' 答案是242,而不是因此,從01月1日開始計數的人需要減去一天 'date -d「2005-1-1 + 240天」+%F' 。 – AjanO