【问题标题】:How can I calculate the date preceding a given date in unix?如何计算unix中给定日期之前的日期?
【发布时间】:2026-01-24 19:50:02
【问题描述】:

我有两个变量:X 和 Y。

X 的值是以 mmddyy 格式给出的日期 我想计算日期之前的日期让它以yyyymmdd的格式返回。

让我举个例子。当 X="091509" (mmddyy 格式) Y 应该是 "20090914" (yyyymmdd 格式)

【问题讨论】:

  • Shell 脚本还是别的什么?
  • shell 脚本......
  • 我不想要昨天的日期............我想要比“x”的值小一天的日期

标签: unix shell scripting


【解决方案1】:
~$ date -d "20090101 -1 day"
Wed Dec 31 00:00:00 CET 2008

如果您想以自定义格式检索日期,您只需输入一些格式字符串。

~$ date -d "2009-09-15 -1 day" +%Y%m%d
20090914

至于您的转换,您可以使用 bash 子字符串提取(当然假设您使用 bash)。这也假设您的输入是一致且“安全的”。

X="091509"
Y=`date -d "${X:4:2}${X:0:2}${X:2:2} -1 day" +%Y%m%d`
echo $Y

http://www.walkernews.net/2007/06/03/date-arithmetic-in-linux-shell-scripts/

【讨论】:

  • 这并没有解决将您的 $X 转换为在此工作的问题,但是是的,让 date 命令计算出 030100 前一天(例如)。
  • @pavium.... 没错。我现在添加了一种进行此类转换的方法。感谢您指出!
  • 这将适用于 GNU 日期(例如在 Linux 上),但不幸的是 -d 不可移植。
【解决方案2】:

我喜欢 Tcl 用于日期算术,尽管它对于 shell 单行程序来说很笨重。使用 Tcl 8.5:

x=091509
y=$(printf 'puts [clock format [clock add [clock scan "%s" -format "%%m%%d%%y"] -1 day] -format "%%Y%%m%%d"]' "$x" | tclsh)

【讨论】:

    【解决方案3】:

    由于 -d 选项在 MacOS X 或 FreeBSD 上不存在,这里是他们的答案

    检索相对于当前时间的日期

    date -v -1d
    

    特别是对于您的问题,您需要 -j-f 标志来使用特定日期

    date -v -1d -j -f %m%d%y 091509 +%Y%m%d
    

    【讨论】:

      【解决方案4】:

      date -d "昨天"

      【讨论】: