linux整理-23Shell操作日期时间

Shell操作日期时间

date - print or set the system date and time
linux系统为我们提供了一个命令date,专门用来显示或者设置系统日期时间的。
语法格式为

date [OPTION]... [+FORMAT]   或者
date [-u|--utc|--universal] [MMDDhhmm[[CC]YY][.ss]]

常用的可选项有:

--help:显示辅助信息
--version:显示date命令版本信息
-u:显示目前的格林威治时间
-d:做日期时间相关的运算
--date='-dateStr':做日期时间的相关运算
1、显示系统当前日期时间

[root@hadoop ~]# date
以指定格式显示日期时间
[root@hadoop ~]# date ‘+%Y-%m-%d %H:%M:%S’

2、设置系统日期时间

[root@hadoop ~]# date -s “2017-01-01 01:01”
[root@hadoop ~]# date --set=“2017-01-01 01:01”

3、获取前几天或者后几天的时间

有时候,我们操作日期时间,经常会要获取前几天或者后几天的时间,那么date命令也给我们提供了实现这个功能的可选项’-d’和’–date’,请看下面细细的例子
先看’-d’:

## 获取下一天的时间
[root@hadoop ~]# date -d next-day '+%Y-%m-%d %H:%M:%S'
[root@hadoop ~]# date -d 'next day' '+%Y-%m-%d %H:%M:%S'
另外一种写法:
[root@hadoop ~]# date '+%Y-%m-%d %H:%M:%S' -d tomorrow

##获取上一天的时间	
[root@hadoop ~]# date -d last-day '+%Y-%m-%d %H:%M:%S'
另外一种写法:
[root@hadoop ~]# date '+%Y-%m-%d %H:%M:%S' -d yesterday

## 获取下一月的时间
[root@hadoop ~]# date -d next-month '+%Y-%m-%d %H:%M:%S'

## 获取上一月的时间	
[root@hadoop ~]# date -d last-month '+%Y-%m-%d %H:%M:%S'

## 获取下一年的时间
[root@hadoop ~]# date -d next-year '+%Y-%m-%d %H:%M:%S'

## 获取上一年的时间	
[root@hadoop ~]# date -d last-year '+%Y-%m-%d %H:%M:%S'

## 获取上一周的日期时间:
[root@hadoop ~]# date -d next-week '+%Y-%m-%d %H:%M:%S'
[root@hadoop ~]# date -d next-monday '+%Y-%m-%d %H:%M:%S'
[root@hadoop ~]# date -d next-thursday '+%Y-%m-%d %H:%M:%S'

那么类似的,其实**,last-year,last-month,last-day,last-week,last-hour,last-minute,last-second**都有对应的实现。相反的,last对应next,自己可以根据实际情况灵活组织

接下来,我们来看’–date’,它帮我实现任意时间前后的计算,来看具体的例子:

##获取一天以后的日期时间
[root@hadoop ~]# date '+%Y-%m-%d %H:%M:%S' --date='1 day'
[root@hadoop ~]# date '+%Y-%m-%d %H:%M:%S' --date='-1 day ago'

## 获取一天以前的日期时间
[root@hadoop ~]# date '+%Y-%m-%d %H:%M:%S' --date='-1 day'
[root@hadoop ~]# date '+%Y-%m-%d %H:%M:%S' --date='1 day ago'

上面的例子显示出来了使用的格式,使用精髓在于改变前面的字符串显示格式,改变数据,改变要操作的日期对应字段,除了天也有对应的其他实现:year,month,week,day,hour,minute,second,monday(星期,七天都可)

4、date 能用来显示或设定系统的日期和时间,

在显示方面,使用者能设定欲显示的格式,格式设定为一个加号后接数个标记,其中可用的标记列表如下:
使用范例:

[root@hadoop ~]# date '+%Y-%m-%d %H:%M:%S'

日期方面:

%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/yyyy) 
%y : 年份的最后两位数字 (00.99) 
%Y : 完整年份 (0000..9999)

时间方面:

%%: 打印出%
%n : 下一行
%t : 跳格
%H : 小时(00..23)
%k : 小时(0..23)
%l : 小时(1..12)
%M : 分钟(00..59)
%p : 显示本地AM或PM
%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 %p
%Z : 显示时区

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

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

例子date "050602032017.55"
在这里插入图片描述

5、有用的小技巧
## 获取相对某个日期前后的日期:
[root@hadoop ~]# date -d 'may 14 -2 weeks'

## 把时间当中无用的0去掉,比如:01:02:25会变成1:2:25
[root@hadoop ~]# date '+%-H:%-M:%-S'

## 显示文件最后被更改的时间
[root@hadoop ~]# date "+%Y-%m-%d %H:%M:%S" -r bin/removeJDK.sh

## 求两个字符串日期之间相隔的天数
[root@hadoop ~]# 
expr '(' $(date +%s -d "2016-08-08") - $(date +%s -d "2016-09-09") ')' / 86400
expr `expr $(date +%s -d "2016-08-08") - $(date +%s -d "2016-09-09")` / 86400
r
## shell中加减指定间隔单位
[root@hadoop ~]# A=`date +%Y-%m-%d`  
[root@hadoop ~]# B=`date +%Y-%m-%d -d "$A +48 hours"`
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值