如何在 shell中获取一年中的某一天?
date '+%V'
会给我一年中的第几周,今天是 15;但我需要找到一年中的哪一天!
从coreutils 日期手册:
%j day of year (001..366)
使用date
命令和%j
选项...
doy=$(date +%j)
POSIX 要求使用格式字符串%j
来获取一年中的某一天,所以如果你想要它作为今天的日期,你就完成了,并且有了一个可移植的解决方案。
date +%j
对于获取任意日期的天数,情况要复杂一些。
在 Linux 上,您通常会有 GNU date
,它允许您使用选项查询任意日期-d
。
date -d '1970-04-01' +%j
的参数-d
可以是一个相当自由形式的表达式,包括像“3 周前”这样的相对时间。
date -d "3 weeks ago" +%j
在包括 MacOS 在内的类似 BSD 的平台上,指定要格式化的日期的机制是不同的。您可以要求它格式化日期-j
并将日期指定为参数(不是选项),并可选择指定字符串参数应如何解析-f
。
date -j 04010000 +%j
显示 4 月 1 日 00:00 的天数。指定要检查的日期的字符串参数相当奇怪,需要指定分钟,然后可选地允许您以 ((month,) day, and) hour 为前缀,并可选地允许 year 作为后缀 (sic) .
date -j -f "%Y-%m-%d" 1970-04-01 +%j
用于-f format date
以更标准的格式传入日期,并打印该日期的日期。
还有一个-v
选项允许您指定相对时间。
date -j -v -3w +%j
显示三周前日期的天数。