如何使用 date 命令找出“星期一第 40 周”的日期?

Joh*_*han 12 date

如何使用 date 命令将诸如“monday week 40”之类的内容转换为 ISO 日期?

我正在玩这样的事情:

date --date='monday week 40' +'%Y-%m-%d'
Run Code Online (Sandbox Code Playgroud)

我要搜索的日期是 2011-10-03。

但是我的问题是这个日期字符串无效,所以我需要另一种方法来解决这个问题。

/谢谢

use*_*own 5

另一种方法:

date --date "+$((40-$(date +%V)))weeks last monday"  +"%F"
Run Code Online (Sandbox Code Playgroud)
  • 40 是您搜索的一周
  • date +%V 返回当前周 (35)
  • 40-35 = 5,这是要添加的周数
  • 从那里,寻找最后一个星期一


man*_*ork 4

真的很难看,而且可能只适用于 GNU date

date -d "$( date -d "$( date +'%Y-01-01' ) +40 weeks") -$( date -d "$( date +'%Y-01-01' ) +40 weeks" +'%w' ) days+1 day" +'%Y-%m-%d'
Run Code Online (Sandbox Code Playgroud)

仅针对 10 月 3 日的示例进行了测试,对于其他一些情况可能会失败。


更新:如果您有非英语语言环境,则需要指定内部日期的输出才能开始工作。(%F 只是 YYYY-MM-DD)。

date -d "$(date -d "$(date +'%Y-01-01') +40 weeks" +"%F") -$(date -d "$(date +'%Y-01-01') +40 weeks" +%w) days +1 day" +"%F"
Run Code Online (Sandbox Code Playgroud)