linux日期格式
⑴ linuxdate日期格式及加减运算
显示时间是个常用的命令,在写shell脚本中也经常会用到与日期相关文件名或时间显示。无论是Linux还是windows下都是date命令。
Linux下date命令用法
date [OPTION]… [+FORMAT]
date [-u|--utc|--universal] [MMDDhhmm[[CC]YY][.ss]]
date命令参数
-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 显示或设定为Coordinated Universal Time时间格式
date命令输出显示格式
%% 字符%
%a 星期的缩写(Sun..Sat)
%A 星期的完整名称 (Sunday..Saturday)
%b 月份的缩写(Jan..Dec)
%B 月份的完整名称(January..December)
%c 日期时间(Sat Nov 04 12:02:33 EST 1989)
%C 世纪(年份除100后去整) [00-99]
%d 一个月的第几天(01..31)
%D 日期(mm/dd/yy)
%e 一个月的第几天 ( 1..31)
%F 日期,同%Y-%m-%d
%g 年份(yy)
%G 年份(yyyy)
%h 同%b
%H 小时(00..23)
%I 小时(01..12)
%j 一年的第几天(001..366)
%k 小时( 0..23)
%l 小时( 1..12)
%m 月份(01..12)
%M 分钟(00..59)
%n 换行
%N 纳秒(000000000..999999999)
%p AM or PM
%P am or pm
%r 12小时制时间(hh:mm:ss [AP]M)
%R 24小时制时间(hh:mm)
%s 从00:00:00 1970-01-01 UTC开始的秒数
%S 秒(00..60)
%t 制表符
%T 24小时制时间(hh:mm:ss)
%u 一周的第几天(1..7); 1 表示星期一
%U 一年的第几周,周日为每周的第一天(00..53)
%V 一年的第几周,周一为每周的第一天 (01..53)
%w 一周的第几天 (0..6); 0 代表周日
%W 一年的第几周,周一为每周的第一天(00..53)
%x 日期(mm/dd/yy)
%X 时间(%H:%M:%S)
%y 年份(00..99)
%Y 年份 (1970…)
%z RFC-2822 风格数字格式时区(-0500)
%Z 时区(e.g., EDT), 无法确定时区则为空
以下是做的一些实验,便于理解
$ date -d "2010-11-15 23:00:01"Mon Nov 15 23:00:01 PST 2010$ date -d "2010/11/15 23:0:2"Mon Nov 15 23:00:02 PST 2010$ date -d "2010/11/15T23:0:2"Mon Nov 15 08:00:02 PST 2010$$ echo "2010-11-15 23:00:01" > date.txt$ echo "2010/11/15 23:00:02" >> date.txt$ cat date.txt2010-11-15 23:00:012010/11/15 23:00:02$ date -f date.txtMon Nov 15 23:00:01 PST 2010Mon Nov 15 23:00:02 PST 2010$$ ls -ltotal 4-rw-r--r-- 1 znan sybase 40 Nov 15 21:14 date.txt$ date -r date.txtMon Nov 15 21:14:36 PST 2010$$ date -I2010-11-15$ date -Ihours2010-11-15T21-0800$ date -Iminutes2010-11-15T21:16-0800$ date -Iseconds2010-11-15T21:16:24-0800$$ date -RMon, 15 Nov 2010 21:47:08 -0800$ date -uTue Nov 16 05:47:13 UTC 2010$$ date +"Today is %A."Today is Monday.$ date +"Date:%b. %e, %G"Date:Nov. 15, 2010$ date +"Date: %b.%e, %G"Date: Nov.15, 2010$ date +"%x %X"11/15/2010 09:50:21 PM$ date +"%Y-%m-%d %H:%M:%S"2010-11-15 21:51:32$ date +"%Y-%m-%d %I:%M:%S %p"2010-11-15 09:51:55 PM
Linux date 常用时间格式
date=$(date "+%Y-%m-%d___%H:%M:%S")
echo date
2012-08-16___05:52:20
date "+%Y-%m-%d"
2012-08-16
------------------------------------
Linux date 日期加减运算
date // 默认时间格式
Thu Aug 16 05:42:38 UTC 2012
date +"%b %e, %G" // 定制格式
Aug 16, 2012
date +"%b %e, %G" -d'-1 day' 或 date -d'-1 day' +"%b %e, %G" // 减一天(加一天类似)
Aug 15, 2012
date +"%b %e, %G" -d'+1 month' 或 date -d'+1 month' +"%b %e, %G" // 加一月(减一月类似)
Sep 16, 2012
date +"%Y年%m月%d日"
2012年08月20日
date +"%Y年%m月%d日" -d'-1 day' // 同上面加减1天(或加减1月)
2012年08月19日
date +"%Y年%-m月%d日" // %-m 去除月份对其的零
2012年8月20日
------------------------------------
Ubuntu 修改系统时间
sudo date -s MM/DD/YY
sudo date -s hh:mm:ss
注意,这里说的是系统时间,是linux由操作系统维护的。
在系统启动时,Linux操作系统将时间从CMOS中读到系统时间变量中,以后修改时间通过修改系统时间实现。为了保持系统时间与CMOS时间的一致性,Linux每隔一段时间会将系统时间写入CMOS。由于该同步是每隔一段时间(大约是11分钟)进行的,在我们执行date -s后,如果马上重起机器,修改时间就有可能没有被写入CMOS,这就是问题的原因。
如果要确保修改的硬件时间生效,可以执行如下命令。
sudo dwclock -w 或 sudo clock -w(ubuntu下有时候无法用clock -w 没有这个命令 如果没有就 使用这个hwclock -w)
这个命令强制把系统时间写入CMOS。
查看硬件时间
sudo hwclock --show
$ sudo hwclock --show
Thursday, August 16, 2012 PM04:46:32 UTC -0.664019 seconds
核心提示:让VMware虚拟机上的ubuntu10.10时间与网络同步
每次启动虚拟机后,ubuntu10.10的时间都不合适,发现需要这样设置:
系统–>系统管理–>时间和日期
时区选择:Asia/Chongqing
配置选择:与互联网服务器保持同步(这时提示需要安装名称为ntp的软件,安装即可,安装后提示要替换一个文件,选择“替换“)
时间服务器选择:time.nuri.NET(Korea,Asia)
查看文件命令:ls -l 和 ls -l --time-style=long-iso
⑵ linux命令大全之date命令详解date命令设置时间
在linux环境中,不管是编程还是其他维护,时间是必不可少的,也经常会用到时间的运算,熟练运用date命令来表示自己想要表示的时间,肯定可以给自己的工作带来诸多方便。
1.命令格式:
date [参数]... [+格式]
2.命令功能:
date 可以用来显示或设定系统的日期与时间。
3.命令参数:
必要参数:
%H 小时(以00-23来表示)。
%I 小时(以01-12来表示)。
%K 小时(以0-23来表示)。
%l 小时(以0-12来表示)。
%M 分钟(以00-59来表示)。
%P AM或PM。
%r 时间(含时分秒,小时以12小时AM/PM来表示)。
%s 总秒数。起算时间为1970-01-01 00:00:00 UTC。
%S 秒(以本地的惯用法来表示)。
%T 时间(含时分秒,小时以24小时制来表示)。
%X 时间(以本地的惯用法来表示)。
%Z 市区。
%a 星期的缩写。
%A 星期的完整名称。
%b 月份英文名的缩写。
%B 月份的完整英文名称。
%c 日期与时间。只输入date指令也会显示同样的结果。
%d 日期(以01-31来表示)。
%D 日期(含年月日)。
%j 该年中的第几天。
%m 月份(以01-12来表示)。
%U 该年中的周数。
%w 该周的天数,0代表周日,1代表周一,异词类推。
%x 日期(以本地的惯用法来表示)。
%y 年份(以00-99来表示)。
%Y 年份(以四位数来表示)。
%n 在显示时,插入新的一行。
%t 在显示时,插入tab。
MM 月份(必要)
DD 日期(必要)
hh 小时(必要)
mm 分钟(必要)
ss 秒(选择性)
选择参数:
-d 显示字符串所指的日期与时间。字符串前后必须加上双引号。
-s 根据字符串来设置日期与时间。字符串前后必须加上双引号。
-u 显示GMT。
--help 在线帮助。
--version 显示版本信息
4.使用说明:
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..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)
2.在设定时间方面:
date -s //设置当前时间,只有root权限才能设置,其他只能查看。
date -s 20080523 //设置成20080523,这样会把具体时间设置成空00:00:00
date -s 01: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" //显示下一年的日期
5.使用实例:
实例1:显示当前时间
命令:
date
date '+%c'
date '+%D'
date '+%x'
date '+%T'
输出:
复制代码代码如下:
[root@localhost ~]# date
2012年 12月 08日 星期六 08:31:35 CST
[root@localhost ~]# date '+%c'
2012年12月08日 星期六 08时34分44秒
[root@localhost ~]# date '+%D'
12/08/12[root@localhost ~]# date '+%x'
2012年12月08日
[root@localhost ~]# date '+%T'
08:35:36[root@localhost ~]# date '+%X'
08时35分54秒
[root@localhost ~]#
实例2:显示日期和设定时间
命令:date --date 08:42:00
输出:
[root@localhost ~]# date '+%c'
2012年12月08日 星期六 08时41分37秒
[root@localhost ~]# date --date 08:42:00
2012年 12月 08日 星期六 08:42:00 CST
[root@localhost ~]# date '+%c' --date 08:45:00
2012年12月08日 星期六 08时45分00秒
[root@localhost ~]#
[code]
实例3:date -d参数使用
命令: date -d "nov 22"
输出:
[code]
[root@localhost ~]# date -d "nov 22"
2012年 11月 22日 星期四 00:00:00 CST
[root@localhost ~]# date -d ƈ weeks'
2012年 12月 22日 星期六 08:50:21 CST
[root@localhost ~]# date -d 'next monday'
2012年 12月 10日 星期一 00:00:00 CST
[root@localhost ~]# date -d next-day +%Y%m%d
20121209
[root@localhost ~]# date -d tomorrow +%Y%m%d
20121209
[root@localhost ~]# date -d last-day +%Y%m%d
20121207
[root@localhost ~]# date -d yesterday +%Y%m%d
20121207
[root@localhost ~]# date -d last-month +%Y%m
201211
[root@localhost ~]# date -d next-month +%Y%m
201301
[root@localhost ~]# date -d ཚ days ago'
2012年 11月 08日 星期四 08:51:37 CST
[root@localhost ~]# date -d '-100 days'
2012年 08月 30日 星期四 08:52:03 CST
[root@localhost ~]# date -d 'dec 14 -2 weeks'
2012年 11月 30日 星期五 00:00:00 CST
[root@localhost ~]# date -d days'
2013年 01月 27日 星期日 08:52:27 CST
说明:#后为需要输入的命令
date 命令的另一个扩展是 -d 选项,该选项非常有用。使用这个功能强大的选项,通过将日期作为引号括起来的参数提供,您可以快速地查明一个特定的日期。-d 选项还可以告诉您,相对于当前日期若干天的究竟是哪一天,从现在开始的若干天或若干星期以后,或者以前(过去)。通过将这个相对偏移使用引号括起来,作为 -d 选项的参数,就可以完成这项任务。
具体说明如下:
date -d "nov 22" 今年的 11 月 22 日是星期三
date -d ƈ weeks' 2周后的日期
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 ཚ days ago' (30天前的日期)
使用负数以得到相反的日期:
date -d 'dec 14 -2 weeks' (相对:dec 14这个日期的两周前的日期)
date -d '-100 days' (100天以前的日期)
date -d days'(50天后的日期)
实例4:显示月份和日数
命令:date '+%B %d'
输出:
[root@localhost ~]# date '+%B %d'
十二月
08[root@localhost ~]#
实例5:显示时间后跳行,再显示目前日期
命令:date '+%T%n%D'
输出:
[root@localhost ~]# date '+%T%n%D'
09:00:30
12/08/12
[root@localhost ~]#