如何实现日期的加减?

Bash

1 基础知识

1.1 认识date的重要参数

1.1.1 查看date的参考文档

使用以下命令查阅参数,

man date

留意“-d”参数,

       -d, --date=STRING
              display time described by STRING, not ‘now’

注:以上大致的意思是,根据字符串显示描述时间(STRING),而非现在时间

1.1.2 查看字符串的解析

更进一步的,我们从手册中查看”STRING”的解析

DATE STRING
       The  --date=STRING is a mostly free format human readable date string such as "Sun, 29
       Feb 2004 16:21:42 -0800" or "2004-02-29 16:21:42" or even  "next  Thursday".   A  date
       string  may  contain  items  indicating  calendar date, time of day, time zone, day of
       week, relative time, relative date, and numbers.  An empty string indicates the begin-
       ning  of  the  day.   The date string format is more complex than is easily documented
       here but is fully described in the info documentation.

注:
大致的翻译是,STRING格式是人类可读的常见日期字符串格式,如
– Sum, 29
– Feb 2004 16:21:42 -0800
– 2004-02-29 16:21:42
– next Thursday
字符串可以接受的表达方式有,
– 日历日期(calendar date)
– 日期时间(time of date)
– 时区(time zone)
– 周几(day of week)
– 相对时间(relative time)
– 相对日期(relative date)
– 相对数字(relative date)
– 空字符串(表示当天的开始)
– 其他复杂的格式(自己领悟)

2 实践部分

基于本章的目的,要实现日期的加减,我们应当使用相对日期或时间和数字来实现。

2.1 格式化系统的字符串

date "+%Y-%m-%d %H:%M:%S"

格式显示如下:

2018-01-25 13:45:17

注:下面要用到做对比

2.2 使用相对数字

2.2.1 描述一年前后

date "+%Y-%m-%d"; date "+%Y-%m-%d" -d "-1 year"; date "+%Y-%m-%d" -d "+1 year"

显示如下:

2018-01-25
2017-01-25
2019-01-25

注:
– “;”号,该符号将一行命令分隔成多条命令。
– 第一条命令显示当前格式化的年月日
– 第二条命令显示当前格式化的年月日的前一年
– 第三条命令显示当前格式化的年月日的后一年

2.2.2 描述一月前

date "+%Y-%m-%d"; date "+%Y-%m-%d" -d "-1 month"

显示如下:

2018-01-25
2017-12-25

2.2.3 描述一天前

date "+%Y-%m-%d"; date "+%Y-%m-%d" -d "-1 day"

显示如下:

2018-01-25
2018-01-24

注: 描述指定的某天的前一天(本例描述上个月最后一天),可使用如下命令,

date "+%Y-%m-01"; date -d"`date +%Y%m01` -1 day" "+%Y-%m-%d"

显示如下:

2018-01-01
2017-12-31

2.2.4 描述一小时前

date "+%Y-%m-%d %H:%M:%S"; date "+%Y-%m-%d %H:%M:%S" -d "-1 hour"

显示如下:

2018-01-25 13:55:02
2018-01-25 12:55:02

2.2.4 描述一分钟前

date "+%Y-%m-%d %H:%M:%S"; date "+%Y-%m-%d %H:%M:%S" -d "-1 minute"

显示如下:

2018-01-25 13:56:47
2018-01-25 13:55:47

2.3 使用相对日期和时间

2.3.1 描述一年前后

date "+%Y-%m-%d"; date "+%Y-%m-%d" -d "year ago"; date "+%Y-%m-%d" -d "next year"

显示如下:

2018-01-25
2017-01-25
2019-01-25

2.3.2 描述一月前

date "+%Y-%m-%d"; date "+%Y-%m-%d" -d "month ago"

显示如下:

2018-01-25
2017-12-25

注:参考上面,不再一一演示。

没有评论

发表回复

Bash
如何收集活跃的RHDS客户端IP地址?

1 前言 一个问题,一篇文章,一出故事。 笔者最近接到需要收集RHDS服务活跃的IP地址的工作任务, …

Bash
如何用Tigase监控postfix smtp服务?

1 前言 一个问题,一篇文章,一出故事。 笔者生产中的smtp服务器最近因为负载均衡器的路由故障而导 …

Bash
如何用Tigase监控Elasticsearch集群?

1 前言 一个问题,一篇文章,一出故事。 笔者生产中有一套Elasticsearch集群,笔者为了能 …