顯示時間是個常用的命令,在寫shell腳本中也經(jīng)常會用到與日期相關(guān)文件名或時間顯示。無論是linux還是windows下都是date命令。
Linux下date命令用法
date [OPTION]… [+FORMAT]?
date [-u|--utc|--universal] [MMDDhhmm[[CC]YY][.ss]]?
date命令參數(shù)
-d, –date=STRING? 顯示STRING指定的時間?
-f, –file=DATEFILE? 類似–date參數(shù)顯示DATEFILE文件中的每行時間?
-ITIMESPEC, –iso-8601[=TIMESPEC]? 以ISO? 8601 格式顯示日期/時間。TIMESPEC為”date”(只顯示日期)、”hours”、”minutes”、”senconds”(顯示時間精度)之一,默認為”date”。?
-r, –reference=FILE? 顯示文件的最后修改時間?
-R, –rfc-2822? 以RFC-2822兼容日期格式顯示時間?
-s, –set=STRING? 設(shè)置時間為STRING?
-u, –utc, –universal? 顯示或設(shè)定為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開始的秒數(shù)?
%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 風格數(shù)字格式時區(qū)(-0500)?
%Z???? 時區(qū)(e.g., EDT), 無法確定時區(qū)則為空?
--------------------------------------------------------------------------------------
實例
$ 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.txt?
2010-11-15 23:00:01?
2010/11/15 23:00:02?
$ date -f date.txt?
Mon Nov 15 23:00:01 PST 2010?
Mon Nov 15 23:00:02 PST 2010?
$?
$ ls -l?
total 4?
-rw-r--r-- 1 znan sybase??? 40 Nov 15 21:14 date.txt?
$ date -r date.txt?
Mon Nov 15 21:14:36 PST 2010?
$?
$ date -I?
2010-11-15?
$ date -Ihours?
2010-11-15T21-0800?
$ date -Iminutes?
2010-11-15T21:16-0800?
$ date -Iseconds?
2010-11-15T21:16:24-0800?
$?
$ date -R?
Mon, 15 Nov 2010 21:47:08 -0800?
$ date -u?
Tue 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?
$
================================================================================================================
1 獲取當前時間戳
date "+%s"????????? #從1970年1月1日00:00:00到當前的秒數(shù)
2 獲取當前日期
date "+%Y-%m-%d"??? #格式串中不能有空白,如有,請將格式串整體放在雙引號內(nèi)
默認情況下,在顯示日期和時間時,date命令使用數(shù)字0填充數(shù)字域。例如,如果用兩位數(shù)字顯示月份,則6月顯示為“06”,也可以用下述控制符來控制填充符號。
短線(-):表示不填充數(shù)字域。
下劃線(_):表示用空格填充數(shù)字域。
例如,命令date“+%d/%m”的輸出為“02/01”;命令date "+%-d/%-m" 結(jié)果為1/3(3月1號的意思);命令date +%_d/%_m的輸出為“ 1/ 5”。
3 獲得相對日期
相對日期相對當前日期而言。d 選項還可以告訴您,相對于當前日期若干天的究竟是哪一天,從現(xiàn)在開始的若干天或若干星期以后,或者以前(過去)。通過將這個相對偏移使用引號括起來,作為 -d 選項的參數(shù),就可以完成這項任務(wù)。
例如,您需要了解兩星期以后的日期。如果您處于 Shell 提示符處,那么可以迅速地得到答案:
$ date -d ’2 weeks’
關(guān)于使用該命令,還有其他一些重要的方法:
使用 next/last指令,您可以得到以后的星期幾是哪一天:
$ 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 ’30 days ago’ (30天前的日期)
您可以使用負數(shù)以得到相反的日期:
$ date -d ‘dec 14 -2 weeks’ (相對:dec 14這個日期的兩周前的日期)
$ date -d ‘-100 days’ (100天以前的日期)
$ date -d ’50 days’(50天后的日期)
4 日期轉(zhuǎn)時間戳
date -d | --date= ‘yyyy-mm-dd hh:mi:ss’ +%s (日期格式為yyyy-mm-dd hh:mi:ss)
如:date --date="2010-12-03" "+%s"?? #--date后面接需要轉(zhuǎn)換的日期
5 時間戳轉(zhuǎn)日期
date -d ’1970-01-01 UTC time seconds’ +”%Y-%m-%d %T %z” (time為時間戳)
如:date --date="1970-01-01 UTC? 1291363421 seconds" "+%Y-%m-%d"
date date --date="@1291363421" 竟然也行!!
6 日期比較大小
(1)比較日期先后最簡單的方法就是直接對日期的字符串進行比較。例如:
if [ "2010-12-31" \< "2011-01-01" ]?? #注意小于號的轉(zhuǎn)義
if [[ "2010-12-31" < "2011-01-01" ]]? #此時不需要轉(zhuǎn)義
(2)如果覺得(1)的方法不靠譜,那么也可以把日期先轉(zhuǎn)換為時間戳,再進行時間戳的對比。? stamp1=`date --date=$date1 +%s`
stamp2=`date --date=$date2 +%s`
stamp=`expr $stamp2 - $stamp1`
echo $stamp
if [ $stamp -gt 0 ]?? #大于0