date命令總結(jié)

顯示時間是個常用的命令,在寫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

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容