linux中用date命令获取昨天、明天或多天前后的日期

在实际操作中,一些脚本中会调用明天,或者昨天,或更多天前的日期,本文将叙述讲述用**date命令** 实现时间的显示。在Linux系统中用man date -d 查询的参数说的比较模糊,以下举例进一步说明:

man date

-d, --date=STRING

display time described by STRING, not 'now'

查看明天日期

date -d next-day +%Y%m%d

date -d tomorrow +%Y%m%d

查看昨天日期

date -d last-day +%Y%m%d

date -d yesterday +%Y%m%d

查看上个月日期

date -d last-month +%Y%m

查看下个月日期

date -d next-month +%Y%m

查看明年日期

date -d next-year +%Y

获取昨天或多天前的日期

DATE=$(date +%Y%m%d --date '2 days ago')

date命令能用来显示或设定系统的日期和时间,在显示方面,使用者能设定欲显示的格式,格式设定为一个加号后接数个标记,其中可用的标记列表如下:

时间方面

  • %: 印出
  • % %n: 下一行
  • %t: 跳格
  • %H: 小时(00..23)
  • %I: 小时(01..12)
  • %k: 小时(0..23)
  • %l: 小时(1..12)
  • %M: 分钟(00..59)
  • %p: 显示本地 AM 或 PM
  • %r: 直接显示时间 (12 小时制,格式为 hh:mm:ss [AP]M)
  • %s: 从 1970 年 1 月 1 日 00:00:00 UTC 到目前为止的秒数 %S: 秒(00..61)
  • %T: 直接显示时间 (24 小时制)
  • %X: 相当于 %H:%M:%S
  • %Z: 显示时区

日期方面

  • %a:星期几 (Sun..Sat)
  • %A:星期几 (Sunday..Saturday)
  • %b:月份 (Jan..Dec)
  • %B:月份 (January..December)
  • %c:直接显示日期和时间
  • %d:日 (01..31)
  • %D:直接显示日期 (mm/dd/yy)
  • %h:同 %b
  • %j:一年中的第几天 (001..366)
  • %m:月份 (01..12)
  • %U:一年中的第几周 (00..53) (以 Sunday 为一周的第一天的情形)
  • %w:一周中的第几天 (0..6)
  • %W:一年中的第几周 (00..53) (以 Monday 为一周的第一天的情形)
  • %x:直接显示日期 (mm/dd/yy)
  • %y:年份的最后两位数字 (00.99)
  • %Y:完整年份 (0000..9999)

若是不以加号作为开头,则表示要设定时间,而时间格式为:MMDDhhmm[[CC]YY][.ss]

其中:

  • MM 为月份
  • DD 为日
  • hh 为小时
  • mm 为分钟
  • CC 为年份前两位数字
  • YY 为年份后两位数字
  • ss 为秒数

选项:

  • -d datestr: 显示 datestr 中所设定的时间 (非系统时间)
  • --help: 显示辅助讯息
  • -s datestr: 将系统时间设为 datestr 中所设定的时间
  • -u: 显示目前的格林威治时间
  • --version: 显示版本编号

例子:

  • 显示时间后跳行,再显示目前日期:date +%T%n%D
  • 显示月份和日数:date +%B %d
  • 显示日期和设定时间(12:34:56):date --date 12:34:56
  • 设置系统当前时间(12:34:56):date --s 12:34:56

注意:当你不希望出现无意义的 0 时(比如说 1999/03/07),则能在标记中插入 - 符号,比如说 date +%-H:%-M:%-S 会把时分秒中无意义的 0 给去掉,像是原本的 08:09:04 会变为 8:9:4。另外,只有取得权限者(比如说 root)才能设定系统时间。 当你以 root 身分更改了系统时间之后,请记得以 clock -w 来将系统时间写入 CMOS 中,这样下次重新开机时系统时间才会持续抱持最新的正确值。

扩展功能

date 工具可以完成更多的工作,不仅仅只是打印出当前的系统日期。您可以使用它来得到给定的日期究竟是星期几,并得到相对于当前日期的相对日期。了解某一天是星期几。

GNU 对 date 命令的另一个扩展是 -d 选项,当您的桌上没有日历表时(UNIX 用户不需要日历表),该选项非常有用。使用这个功能强大的选项,通过将日期作为引号括起来的参数提供,您可以快速地查明一个特定的日期究竟是星期几:

date -d "nov 22"

2011年 11月 22日 星期二 00:00:00 CST

在本示例中,您可以看到今年的 11 月 22 日是星期二。所以,假设在11月22日召开一个重大的会议,您可以立即了解到这一天是星期二,而这一天您将赶到驻地办公室。

获得相对日期

-d 选项还可以告诉您,相对于当前日期若干天的究竟是哪一天,从现在开始的若干天或若干星期以后,或者以前(过去)。通过将这个相对偏移使用引号括起来,作为 -d 选项的参数,就可以完成这项任务。

例如,您需要了解两星期以后的日期。如果您处于Shell提示符处,那么可以迅速地得到答案:

date -d '2 weeks'

关于使用该命令,还有其他一些重要的方法。使用 next/last指令,您可以得到以后的星期几是哪一天:

date -d 'next monday' (下周一的日期)

date -d next-day +%Y%m%d(明天的日期)

或者:date -d tomorrow +%Y%m%d

date -d last-day +%Y%m%d(昨天的日期)

或者:date -d yesterday +%Y%m%d

date -d last-month +%Y%m(上个月是几月)

date -d next-month +%Y%m(下个月是几月)

使用 ago 指令,您可以得到过去的日期:

date -d '30 days ago' (30天前的日期)

您可以使用负数以得到相反的日期:

date -d 'dec 14 -2 weeks' (相对:dec 14这个日期的两周前的日期)

date -d '-100 days' (100天以前的日期)

date -d '50 days'(50天后的日期)

这个技巧非常有用,它可以根据将来的日期为自己设置提醒,可能是在脚本或Shell启动文件中,如下所示:

复制代码
DAY=`date -d ’2 weeks’ +"%b %d"`
if test "`echo $DAY`" = "Aug 16"; then echo ’Product launch is now two weeks away!’; fi
相关推荐
软件技术员21 分钟前
Let‘s Encrypt SSL证书:acmessl.cn申请免费3个月证书
服务器·网络协议·ssl
哎呦喂-ll32 分钟前
Linux进阶:环境变量
linux
耗同学一米八34 分钟前
2024 年河北省职业院校技能大赛网络建设与运维赛项样题四
运维·网络
Rverdoser34 分钟前
Linux环境开启MongoDB的安全认证
linux·安全·mongodb
PigeonGuan44 分钟前
【jupyter】linux服务器怎么使用jupyter
linux·ide·jupyter
一条晒干的咸魚1 小时前
【Web前端】创建我的第一个 Web 表单
服务器·前端·javascript·json·对象·表单
东华果汁哥1 小时前
【linux 免密登录】快速设置kafka01、kafka02、kafka03 三台机器免密登录
linux·运维·服务器
咖喱鱼蛋2 小时前
Ubuntu安装Electron环境
linux·ubuntu·electron
ac.char2 小时前
在 Ubuntu 系统上安装 npm 环境以及 nvm(Node Version Manager)
linux·ubuntu·npm