天天看点

date

。 时间加减

这里处理方法,是将基础的时间转变为时间戳,然后,需要增加或者改变时间,变成 秒。

如:1990-01-01 01:01:01 加上 1小时 20分

处理方法:

a.将基础时间转为时间戳

time1=$(date +%s -d '1990-01-01 01:01:01')

echo $time1

631126861 【时间戳】

b.将增加时间变成秒

[root@localhost ~]# time2=$((1*60*60+20*60))

[root@localhost ~]# echo $time2

4800

c.两个时间相加,计算出结果时间

time1=$(($time1+$time2))

time1=$(date +%Y-%m-%d\ %H:%M:%S -d "1970-01-01 UTC $time1 seconds");

1990-01-01 02:21:01

2。时间差计算方法

如:2010-01-01 与 2009-01-01 11:11:11 时间差

原理:同样转成时间戳,然后计算天,时,分,秒

time1=$(($(date +%s -d '2010-01-01') - $(date +%s -d '2009-01-01 11:11:11')));

echo time1

将time1 / 60 秒,就变成分了。

补充说明:

shell 单括号运算符号:

a=$(date);

等同于:a=`date`;

双括号运算符:

a=$((1+2));

echo $a;

等同于:

a=`expr 1 + 2`

-d, –date=STRING  显示STRING指定的时间

-f, –file=DATEFILE 类似–date参数显示DATEFILE文件中的每行时间

-ITIMESPEC, –iso-8601[=TIMESPEC]  以ISO 8601 格式显示日期/时间。

 TIMESPEC为”date”(只显示日期)、”hours”、”minutes”、”senconds”(显示时间精度)之一,

 默认为”date”。

-r, –reference=FILE  显示文件的最后修改时间

-R, –rfc-2822  以RFC-2822兼容日期格式显示时间

-s, –set=STRING  设置时间为STRING

-u, –utc, –universal  显示或设定为CoordinatedUniversal Time时间格式

date常规输出:

[root@root ~]# date "+%Y-%m-%d"  

2013-02-19  

[root@root ~]# date "+%H:%M:%S"  

13:13:59  

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

2013-02-19 13:14:19  

[root@root ~]# date "+%Y_%m_%d %H:%M:%S"    

2013_02_19 13:14:58  

[root@root ~]# date -d today   

Tue Feb 19 13:10:38 CST 2013  

[root@root ~]# date -d now  

Tue Feb 19 13:10:43 CST 2013  

[root@root ~]# date -d tomorrow  

Wed Feb 20 13:11:06 CST 2013  

[root@root ~]# date -d yesterday  

Mon Feb 18 13:11:58 CST 2013  

date详细用法

date 用法: date [OPTION]... [+FORMAT]

date [-u|--utc|--universal] [MMDDhhmm[[CC]YY][.ss]]

date 可以用来显示或设定系统的日期与时间。

1.显示方面

使用者可以设定欲显示的格式,格式设定为一个加号后接数个标记,其中可用的标记列表如下: % :打印出 %

%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-60)

%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)

2.设定时间方面

date -s//设置当前时间,只有root权限才能设置,其他只能查看。

date -s 20080523//设置成20080523,这样会把具体时间设置成空00:00:00

date -s01:01:01//设置具体时间,不会对日期做更改

date -s “01:01:01 2008-05-23″//这样可以设置全部时间

date -s“01:01:01 20080523″//这样可以设置全部时间

date -s “2008-05-23 01:01:01″//这样可以设置全部时间

date -s“20080523 01:01:01″//这样可以设置全部时间

3.加减

date+%Y%m%d     //显示前天年月日

date+%Y%m%d --date="+1 day" //显示前一天的日期

date +%Y%m%d--date="-1 day"  //显示后一天的日期

date +%Y%m%d --date="-1 month" //显示上一月的日期

date +%Y%m%d--date="+1 month"  //显示下一月的日期

date +%Y%m%d --date="-1 year" //显示前一年的日期

date +%Y%m%d--date="+1 year"  //显示下一年的日期

4.时间设置

一般使用“date -s”命令来修改系统时间

比如将系统时间设定成2011年7月13日的命令:date -s 07/13/2011

将系统时间设定成11点12分0秒的命令:date -s 11:12:00

注意:这里说的是系统时间,是linux由操作系统维护的。

在系统启动时,Linux操作系统将时间从CMOS中读到系统时间变量中,以后修改时间通过修改系统时间实现。为了保持系统时间与CMOS时间的一致性,Linux每隔一段时间会将系统时间写入CMOS。由于该同步是每隔一段时间(大约是11分钟)进行的,在我们执行date-s后,如果马上重起机器,修改时间就有可能没有被写入CMOS,这就是问题的原因。

如果要确保修改生效可以执行如下命令。

#clock –w

这个命令强制把系统时间写入CMOS。

本文转自 远永201314 51CTO博客,原文链接:http://blog.51cto.com/7336056/1877515