23

如何在 shell中获取一年中的某一天?

date '+%V'会给我一年中的第几周,今天是 15;但我需要找到一年中的哪一天!

4

3 回答 3

32

coreutils 日期手册:

%j     day of year (001..366)
于 2012-04-11T19:19:35.257 回答
31

使用date命令和%j选项...

doy=$(date +%j)
于 2012-04-11T19:27:53.630 回答
1

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

显示三周前日期的天数。

于 2021-09-08T08:30:48.963 回答