如何将年份和年份中的日期转换为日期 YYYYMMDD?

Umb*_*ule 12 linux bash date

我希望从一年中的某一天(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)

  • 这是一个很棒的解决方案。仅限 GNU 日期,但要短得多。 (2认同)