Linux 命令每日一练:date

命令简介

date命令的功能是显示或设置系统时间与日期。很多shell脚本里面需要打印不同格式的时间或日期,以及要根据时间和日期执行操作。延时通常用于脚本执行过程中提供一段等待的时间。日期可以用多种格式去打印,也可以使用命令设置固定的格式。在类UNIX系统中,日期被存储为一个整数,其大小为自世界标准时间(UTC)1970年1月1日0时0分0秒起流逝的秒数。

命令格式

date 以系统默认格式显示当前系统的时间
[root@myhosy ~]# date
Tue Mar  5 09:54:56 CST 2019
date 格式化显示日期(以+开头,引号内再接你想要的日期格式字符串列表)
[root@myhosy ~]# date "+%F"
2019-03-05

命令参数

-d:显示由datestr所描述日期或时间。
-s:根据datestr来设置日期或时间。datestr前后必须加上双引号;
-u: universal显示GMT;
–help:在线帮助;
–version:显示版本信息。

日期格式字符串列表

  • %H 小时,24小时制(00~23) ##常用
  • %I 小时,12小时制(01~12)
  • %k 小时,24小时制(0~23)
  • %l 小时,12小时制(1~12)
  • %M 分钟(00~59) ##常用
  • %p 显示出AM或PM
  • %r 显示时间,12小时制(%H:%M:%S %p)04:34:41 PM
  • %s 从1970年1月1日00:00:00到目前经历的秒数1524559123
  • %S 显示秒(00~59) ##常用
  • %T 显示时间,24小时制(%H:%M:%S)16:35:29
  • %X 显示时间的格式(%H:%M:%S)04:34:41 PM
  • %Z 显示时区,日期域(CST)
  • %a 星期的简称(Sun~Sat)Tue
  • %A 星期的全称(Sunday~Saturday)Tuesday
  • %h或%b 月的简称(Jan~Dec)Apr
  • %B 月的全称(January~December)April
  • %c 日期和时间(Tue 24 Apr 2018 04:40:23 PM CST)
  • %d 一个月的第几天(01~31) ##常用
  • %x年月日(mm/dd/yyyy)04/24/2018
  • %D年月日(mm/dd/yy)04/24/18
  • %j 一年的第几天(001~366)
  • %m 月份(01~12) ##常用
  • %w一个星期的第几天(0代表星期天)
  • %W 一年的第几个星期(00~53,星期一为第一天)
  • %y 年的最后两个数字(2018则是18)
  • %Y年的四个数字(2018则是2018) ##常用
  • %F 年月日(yyyy-mm-dd)2018-04-24 ##常用

实战演练及总结

以系统默认格式打印当前日期或时间

[root@myhost ~]# date
Tue Mar  5 10:13:49 CST 2019
[root@myhost ~]# echo ` date ` 
Tue Mar 5 10:13:50 CST 2019
[root@myhost ~]# echo $(date)
Tue Mar 5 10:14:06 CST 2019

以yyyy-mm-dd格式打印当前日期或时间

[root@myhost ~]#  date +%F  
2019-03-05
[root@myhost ~]#  date +"%F"  
2019-03-05
[root@myhost ~]# echo ` date +%F  `
2019-03-05
[root@myhost ~]# echo $(date +%F)
2019-03-05

以yyyy-mm-dd HH:MM:SS格式打印当前日期或时间

[root@myhost ~]# date +"%F\ %H:%M:%S"
2019-03-05 10:17:04
[root@myhost ~]# date +"%Y-%m-%d\ %H:%M:%S"  
2019-03-05 10:20:56

输出前几天的日期

[root@myhost ~]# date  +%Y-%m-%d  -d "2 day ago"
2019-03-03
[root@myhost ~]# date  +%Y-%m-%d  --date="2 day ago"
2019-03-03
[root@myhost ~]# date  +%F -d "2 day ago"
2019-03-03
[root@myhost ~]# date  +%F --date="2 day ago"
2019-03-03

输出3小时前的日期或时间

[root@myhost~]# date   +"%Y-%m-%d %H:%M:%S"  -d "3 hour ago"  
2019-03-05 07:28:45
[root@myhost~]#  date   +"%Y-%m-%d %H:%M:%S"  --date="3 hour ago"   
2019-03-05 07:31:41

输出20秒后的日期或时间

[root@myhost~]# date   +"%Y-%m-%d %H:%M:%S"  -d "20 second" 
2019-03-05 10:32:49
[root@myhost~]# date   +"%Y-%m-%d %H:%M:%S"  --date="20 second"
2019-03-05 10:32:58

传说中的 1234567890 秒

[root@myhost ~]# date -d "1970-01-01 1234567890 seconds" +"%Y-%m-%d %H:%m:%S"
2009-02-13 23:02:30

普通转格式化

[root@myhost ~]# date -d "2009-12-12" +"%Y/%m/%d %H:%M:%S"
2009/12/12 00:00:00
[root@myhost ~]# date -d "2009-12-12" +"%s"
1260547200

apache日期时间格式转换

[root@myhost ~]#  date -d "Dec 5, 2009 12:00:37 AM" +"%Y-%m-%d %H:%M:%S"
2009-12-05 00:00:37
[root@myhost ~]#  date -d "Dec 5, 2009 12:00:37 AM" +"%s"
1259942437

格式转换后时间游走

[root@myhost ~]# date -d "Dec 5, 2018 12:00:37 AM 2 year ago" +"%Y-%m-%d %H:%M:%S"
2016-12-05 00:00:37
[root@myhost ~]# date -d "Dec 5, 2018 12:00:37 AM 2 year ago" +"%s"
1480867237

把时间转成秒数

[root@myhost  ~]# date
Tue Mar  5 14:41:54 CST 2019
[root@myhost  ~]# date +%s
1551768131
[root@myhost  ~]# date -d "Tue Mar  5 14:41:54 CST 2019"  +%s
1551768114

把秒数转换成标准时间格式

[root@myhost  ~]#  date -d '1970-1-1 0:0:0 GMT + 1551768114 seconds'
Tue Mar  5 14:41:54 CST 2019
[root@myhost  ~]#  date -d @1551768114
Tue Mar  5 14:41:54 CST 2019
[root@myhost  ~]#  date -d @1551768114 +%F
2019-03-05

时间加减操作

date +%Y%m%d                  #显示当天年月日
date +%Y%m%d-d "+1 day"       		#显示后一天的日期
date +%Y%m%d  -d "-1 day" 				#显示前一天的日期
date +%Y%m%d  -d "+1 month"   		#显示下一月的日期
date +%Y%m%d  -d "-1 month"			#显示上一月的日期
date +%Y%m%d  -d "+1 year"     		#显示下一年的日期
date +%Y%m%d  -d "-1 year"				#显示前一年的日期

设定时间

date -s                   #设置当前时间,只有root权限才能设置,其他只能查看
date -s 20120523            #设置日期为20120523,设置时分秒成空00:00:00
date -s 01:01:01               #设置时分秒时间,不会对日期做更改
date -s "01:01:01 2012-05-23"  	#这样可以设置日期+时分秒
date -s "01:01:01 20120523"   		#这样可以设置日期+时分秒
date -s "2012-05-23 01:01:01"  	#这样可以设置设置日期+时分秒
date -s "20120523 01:01:01"    	#这样可以设置设置日期+时分秒

拓展

有时需要检查一组命令花费的时间
#!/bin/bash
source /etc/profile

#define variables
start=`date +"%s" `
#start your command
ll /home
end=`date +"%s" `
#let span=end-start
#span=$((end-start))
#span=($end-$start)

echo $span seconds.

如何进行两个整数相加?更多参考:
https://blog.csdn.net/yuki5233/article/details/84848834

建议使用别名简化并转换成我们熟悉的时间格式
alias d=' date +"%F %T" '
[root@myhost  ~]# date +"%F %T"
2019-03-05 14:48:34
[root@myhost  ~]# d
2019-03-05 14:48:34

alias d=' date +"%F %T" -d '
[root@myhost  ~]# date +"%F %T" -d @1551768114
2019-03-05 14:41:54
[root@myhost  ~]#dd @1551768114
2019-03-05 14:41:54

最后可以把这两个alias语句放入.bash_profile中,登陆后即可使用。

猜你喜欢

转载自blog.csdn.net/yuki5233/article/details/88169646
今日推荐