使用 Bash Shell Date 命令获取昨天或明天的日期
当不带参数调用时,date 命令会显示当前日期和时间。根据指定的选项,date 命令会设置日期和时间或以用户定义的格式打印。但是,如何使用 bash shell 脚本获取昨天的日期?明天的日期呢?我见过许多系统管理员编写 Perl 脚本来计算相对日期,例如昨天或明天的日期。您可以使用 GNU date 命令或 BSD/date 命令,它们旨在处理相对日期计算,例如:
- 1年
- 2 天
- 2天前
- 5 年
- 昨天
- 明天
- 下周
让我们看看如何在 Linux、macOS 或类 Unix 操作系统上使用 bash date 命令获取昨天或明天的日期。
教程详细信息 | |
---|---|
难度等级 | 简单的 |
Root 权限 | 不 |
要求 | Linux 或 Unix 终端 |
类别 | Linux shell 脚本 |
操作系统兼容性 | AIX • Alma • Alpine • Arch • CentOS • Debian • Fedora • FreeBSD • HP-UX • Linux • macOS • Mint • NetBSD • OpenBSD • openSUSE • Pop!_OS • RHEL • Rocky • Stream • SUSE • Ubuntu • Unix • WSL |
预计阅读时间 | 7 分钟 |
在 Linux 或 Unix 上使用 bash 获取昨天或明天的日期
date 命令的语法和示例如下。
GNU 日期语法在 bash 中获取昨天的日期
语法如下:
date --date="STRING" date --date="next Friday" date --date="2 days ago" date --date="yesterday" date --date="yesterday" +"%format" # Get yesterday's date in dd-mm-yy format date --date="yesterday" +"%d-%m-%y" date --date="yesterday" +"%m-%d-%y" # US date format date --date="yesterday" +"%Y-%m-%d" # YYYY-mm-dd format ## store y'day date in a shell variable called yday and display it ## yday=$(date --date="yesterday" +"%Y-%m-%d") echo "$yday"
是--date=STRING人类可读的格式,例如“下周四”或“1 个月前”。日期字符串可能包含指示日历日期、一天中的时间、时区、星期几、相对时间、相对日期和数字的项目。有关字符串的更多信息,请参阅“如何格式化日期以在 Shell 脚本中显示或使用” +"%format"。
为什么使用相对 GNU/date 格式?
- 易于使用
- 编写 shell 脚本
- 使用 Linux cron自动执行任务(例如在每月最后一天或每月第 N 天或第 3 个星期五运行作业等等)
GNU 日期命令示例
首先,尝试显示今天的日期,输入:
$ date
示例输出:
Wed Jun 15 04:47:45 IST 2011
要显示昨天的日期,请输入:
示例输出:
$ date --date="1 days ago"
$ date --date="1 day ago"
$ date --date="yesterday"
$ date --date="-1 day"
Tue Jun 14 04:54:40 IST 2011
您可以使用各种字符串格式来产生相同的输出。请注意,date 命令的输出并不总是可以接受为日期字符串,这不仅是因为语言问题,还因为时区项(如 IST 或 EST)没有标准含义。
在 Linux 上的 Bash 脚本中查找明天的日期
键入以下命令
$ date --date="-1 days ago"
或
$ date --date="next day"
获取未来的日期
要获取明天和后天(明天+N),使用day词来获取未来的日期,如下所示:
date --date='tomorrow' date --date='1 day' date --date='10 day' date --date='10 week' date --date='10 month' date --date='10 year'
日期字符串“tomorrow”表示未来的一天,相当于“day”字符串,即前两个命令相同。
获取过去的日期
要获取昨天和过去的一天,请使用字符串day ago:
date --date='yesterday' date --date='1 day ago' date --date='10 day ago' date --date='10 week ago' date --date='10 month ago' date --date='10 year ago'
日期字符串“yesterday”表示过去的一天,相当于“day ago”字符串,即前两个命令相同。
按整年或整月移动
您可以添加年份和月份关键字以获取更准确的日期:
$ date --date='2 year ago' # Past
$ date --date='3 years' # Go into future
$ date --date='2 days' # Future
$ date --date='1 month ago' # Past
$ date --date='2 months' # Future
使用更精确的单位来表示移动日期
- 您可以使用两周,共 14 天。
- 一周7 天。
- 小时60 分钟
- 分钟60 秒
- 一秒钟
- 您还可以使用this / now / today关键词来强调含义。
使用精确字符串单位的几个例子:
date --date='fortnight' date --date='5 fortnight' date --date='fortnight ago' date --date='5 fortnight ago' date --date='2 hour' date --date='2 hour ago' date --date='20 minute' date --date='20 minute ago'
使用星期几项目移动日期
要打印这个星期五的日期,请输入:
date --date='this Friday' ## OR ## date --date='next Friday'
星期几可以完整拼写:星期日、星期一、星期二、星期三、星期四、星期五或星期六。星期几可以缩写为前三个字母,后面可以加句号
date --date='this Fri' ## OR ## date --date='next Fri.'
您还可以按照下列方式向前移动补充周数:
date --date='2 Fri' ## OR ## date --date='second Fri.' ## OR ## date --date='Second Friday' #### #### last DAY or next DAY move one week before or after the day that DAY by itself #### date --date='last Friday' date --date='next Friday'
显示未来的日期($现在 + 6 个月 + 15 天),输入:
$ date --date='6 months 15 day'
显示过去的日期 [$现在 - (两个月零 5 天前)],输入:
$ date --date='-2 months 5 day ago'
使用纪元时间显示日期
让我们以纪元时间显示日期:
$ date --date='1970-01-01 00:00:01 UTC +5 hours' +%s
如何使用相对日期格式设置系统日期和时间?
您还可以使用相对格式来设置日期和时间。例如,要将系统时钟向前设置 30 分钟,请输入(您必须以 root 身份登录才能设置系统日期和时间):
# date --set='+30 minutes'
或
# date --set='1 day ago'
或
# date --set='5 day'
但是,我建议设置NTPD 客户端/服务器或OpenNTPD 服务器,以将计算机系统的本地时钟与远程 NTP 服务器同步。
如何将昨天分配给 Shell 变量?
使用以下语法(有关更多信息,请参阅为 shell 变量分配值和命令替换)
yest=$(date --date="yesterday") echo "$yest" yest=$(date --date="yesterday" +"%d/%m/%Y") echo "The backup was last verified on $yest"
假设您将日期格式设置如下:
$ MY_DATE=JULY-18-2019
要从 $MY_DATE 获取给定日期所在月份的第一天,请运行:
$ date -d "$MY_DATE" +%b-01-%Y
从 $MY_DATE 获取给定日期所在月份的前一个日期:
$ >date -d “$MY_DATE -1 days” +%b-%d-%Y
获取月份最后一天并使用 echo 命令/printf 命令打印:
$ t_FIRST_DAY_NEXT_MON=$(date -d "$MY_DATE +1 month" +%b-01-%Y)
$ echo "$t_FIRST_DAY_NEXT_MON"
$ date -d "$t_FIRST_DAY_NEXT_MON -1 day" +%b-%d-%Y
关于 FreeBSD 或 macOS 上的 BSD 日期的说明
在 macOS 或 FreeBSD 上的 bash 中获取昨天的日期的语法如下:
date -v VAL # yesterday date -v -1d # yesterday date -v +1d # tomorrow date -v -1w # 1 week ago date -v +1w # next week ## formatting date ## date -v -2w +"%F" # 2 weeks ago in YYYY-mm-dd format date -v +1d +"%d-%m-%y" # dd-mm-yy format date -v +1d +"%m-%d-%Y" # mm-dd-yyyy (US) format
如果VAL是数字,则必须使用 y、m、w、d、H、M 或 S 之一来指定要调整日期的哪一部分。使用 man 命令查看 macOS Unix 或 FreeBSD 系统上的手册页:
$ man date
如何在 macOS 上获取 GNU 日期语法?
首先,在 Mac OS 上安装 Homebrew 以使用 brew 包管理器。接下来,使用 brew 命令如下:
$ brew install coreutils
在 macOS 上,GNU date 现在可用作 gdate 命令。因此,示例
################################## ## GNU date is 'gdate' on macOS ## ################################## gdate --date="STRING" gdate --date="next Friday" gdate --date="2 days ago" gdate --date="yesterday" gdate --date="yesterday" +"%format"
结论
这就是您在 Linux 和 Unix 系统上使用 date 命令获取昨天或明天日期的方法。这被称为相对日期,现在您知道如何在 Linux 或类 Unix 系统上根据需要获取它。有关更多信息,请参阅:
- 授权
- 如何格式化日期以便在 Shell 脚本中显示或使用
- GNU/date 文档页面