正确日期 -d“下周一”

正确日期 -d“下周一”

我正在尝试编写一个快速脚本,用于找出不是今天的下一个星期一的日期。虽然 date 命令接受此表达式,但它似乎将其解释为等同于“这个星期一”。也就是说,如果今天是星期一,它会发出今天的日期,否则它会发出下周的星期一。

有什么想法可以使用 date 命令(或实际上任何可用于 bash 的命令)来执行此操作,而无需自己进行日期算术?

更新:这在我的环境中似乎有些奇怪,因为有几个人在他们的系统上展示了该命令按预期工作。这是我看到的:

$ date
Tue Jul 31 23:38:28 UTC 2012
$ date -d 'next tuesday'
Tue Jul 31 00:00:00 UTC 2012
$ date --version
date (GNU coreutils) 5.97

看来我有一个古老版本的日期,也许这是我的问题......

答案1

GNU 日期似乎运行正常。

$ date -d "next monday"
Mon Aug  6 00:00:00 EDT 2012
$ date -d "next tuesday"
Tue Aug  7 00:00:00 EDT 2012
$ date -d "next wednesday"
Wed Aug  1 00:00:00 EDT 2012
$ date --version
date (GNU coreutils) 8.15

检查以确保您的系统确实具有正确的日期、时间和时区。

还要检查您是否正在运行相对较新的 GNU coreutils 版本。您描述的行为是旧版本 coreutils 中的一个错误,已在 6.0 版中修复

日期:像 date -d '2006-04-23 21 days ago' 这样的命令会在某些时区打印错误的日期。(请参阅测试中的示例)

答案2

你确定你在脚本中执行命令的方式没有问题吗?可能是缺少引号或类似的东西?我无法重现你的问题。

$ date
Tue Jul 31 19:08:50 EDT 2012
$ date -d "next tuesday"
Tue Aug  7 00:00:00 EDT 2012
$ date -d "this tuesday"
Tue Jul 31 00:00:00 EDT 2012
$ date --version
date (GNU coreutils) 8.5

相关内容