我希望从一年中的某一天(1-366)和一年(例如 2011)到 YYYYMMDD 格式的日期?
Den*_*son 18
这个 Bash 函数在基于 GNU 的系统上对我有用:
jul () { date -d "$1-01-01 +$2 days -1 day" "+%Y%m%d"; }
Run Code Online (Sandbox Code Playgroud)
一些例子:
$ y=2011; od=0; for d in {-4..4} 59 60 {364..366} 425 426; do (( d > od + 1)) && echo; printf "%3s " $d; jul $y $d; od=$d; done
-4 20101227
-3 20101228
-2 20101229
-1 20101230
0 20101231
1 20110101
2 20110102
3 20110103
4 20110104
59 20110228
60 20110301
364 20111230
365 20111231
366 20120101
425 20120229
426 20120301
Run Code Online (Sandbox Code Playgroud)
此函数将 Julian 零日视为上一年的最后一天。
这是基于 UNIX 的系统(例如 macOS)的 bash 函数:
jul () { (( $2 >=0 )) && local pre=+; date -v$pre$2d -v-1d -j -f "%Y-%m-%d" $1-01-01 +%Y%m%d; }
Run Code Online (Sandbox Code Playgroud)