date命令詳解

 

基礎命令學習目錄首頁html

 

原文連接:https://www.cnblogs.com/qmfsun/p/4598650.htmllinux

date "+今天是%Y-%d-%m,如今是%H:%M:%S"shell

1. 顯示時間
date命令能夠按照指定格式顯示日期,只鍵入date則以默認格式顯示當前時間。以下:編程


若是須要以指定的格式顯示日期,可使用「+」開頭的字符串指定其格式,詳細格式以下:
%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)
上述格式沒必要全都記住,只須要掌握幾個經常使用的便可。例如%Y表示年,%m表示月,%d表示日,%H表示小時,%M表示分鐘,%S表示秒,%s表示從 1970 年 1 月 1 日 00:00:00 UTC 到目前爲止的秒數,至關於time函數,%w表示一週中的第幾天。實例見下:bash

date "+如今時間是: %Y-%m-%d %H:%M:%S"服務器

 

date -s "+如今時間是: %Y-%m-%d %H:%M:%S"網絡

 


若是要顯示的時間不是當前時間,而是通過運算的時間,則能夠用-d選項。例如顯示三年前的時間:app


看到這個命令我很受傷,過去的時間再也回不去了,只能用命令看看。顯示三個月後的時間:異步


顯示十天後的時間:編程語言


有時候須要獲取當前時間距離1970年0時0分0秒所經歷的秒數,保存在變量中:


2. 設置時間
用 -s選項能夠設置系統時間:


方式多種多樣,任你選:


你要足夠相信date的智能。

 

 

date命令的常見使用方法總結

 

 

 

因爲跨年、跨月、閏平年等特殊性,在平常編程過程當中對日期的處理老是異常麻煩。目前,各類編程語言也都要本身的日期函數庫,因此在對日期進行處理前,必定先查查你使用的編程語言有沒有日期函數庫。使用shell編程時,對於日期的使用也老是會或多或少出如今程序中:輸出程序處理時間,處理幾天前的文件,……

在shell中date命令能夠來達到咱們的需求,在這裏對其常見使用方法進行總結(關於date命令的具體說明能夠man date或者date --help,這裏只總結常見用法)。

先看看date的選項:

選項
    -d datestr  | --date=datestr: 顯示 datestr 中所設定的時間 (非系統時間)

–help : 顯示輔助訊息

-s datestr  |  --set=datestr: 將系統時間設爲 datestr 中所設定的時間

-u | --utc | --universal: 顯示目前的格林威治時間

–version : 顯示版本編號

其中-d和-s最常使用。

 

1 獲取當前時間戳

date "+%s"      #從1970年1月1日00:00:00到當前的秒數

2 獲取當前日期

date "+%Y-%m-%d"   #格式串中不能有空白,若有,請將格式串總體放在雙引號內

默認狀況下,在顯示日期和時間時,date命令使用數字0填充數字域。例如,若是用兩位數字顯示月份,則6月顯示爲「06」,也能夠用下述控制符來控制填充符號。

短線(-):表示不填充數字域。

下劃線(_):表示用空格填充數字域。

例如,命令「date +%d/%m」的輸出爲「02/01」;命令「date +%-d/%-m」的輸出爲「2/1」;命令「date +_d/%_m」的輸出爲「 1/ 5」。

3 得到相對日期

相對日期相對當前日期而言。d 選項還能夠告訴您,相對於當前日期若干天的到底是哪一天,從如今開始的若干天或若干星期之後,或者之前(過去)。經過將這個相對偏移使用引號括起來,做爲 -d 選項的參數,就能夠完成這項任務。

例如,您須要瞭解兩星期之後的日期。若是您處於 Shell 提示符處,那麼能夠迅速地獲得答案:
    $ date -d ’2 weeks’

關於使用該命令,還有其餘一些重要的方法:

使用 next/last指令,您能夠獲得之後的星期幾是哪一天:
    $ date -d ‘next monday’ (下週一的日期)

$ date -d next-day +%Y%m%d(明天的日期)或者:date -d tomorrow +%Y%m%d

$ date -d 「20110321 next-day」 +%Y%m%d(20110321後一天的日期)

$ 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天前的日期)

您可使用負數以獲得相反的日期:

$ date -d ‘dec 14 -2 weeks’ (相對:dec 14這個日期的兩週前的日期)

$ date -d ‘-100 days’ (100天之前的日期)

$ date -d ’50 days’(50天后的日期)

4 日期轉時間戳

date -d | --date= ‘yyyy-mm-dd hh:mi:ss’ +%s (日期格式爲yyyy-mm-dd hh:mi:ss)

如:date --date="2010-12-03" "+%s"   #--date後面接須要轉換的日期

5 時間戳轉日期

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" ]  #注意小於號的轉義

if [[ "2010-12-31" < "2011-01-01" ]]  #此時不須要轉義

(2)若是以爲(1)的方法不靠譜,那麼也能夠把日期先轉換爲時間戳,再進行時間戳的對比。  

stamp1=`date --date=$date1 +%s`

stamp2=`date --date=$date2 +%s`

stamp=`expr $stamp2 - $stamp1`

echo $stamp

if [ $stamp -gt 0 ]  #大於0

7 獲取指定日期的相對時間

$date -d "20110321 +2 days" (相對20110321兩天後) 

$date -d "20110321 +2 weeks" (相對20110321兩週後)

這兩種方式在較早的操做系統中(如RedHat 4U7)可能不支持,需使用next/last指令。 

 

 

天天一個linux命令(37):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'

date '+%X'

輸出:

[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 ~]#

 

說明:

 

實例3:date -d參數使用

命令:

輸出:

[root@localhost ~]# date -d "nov 22"

2012年 11月 22日 星期四 00:00:00 CST

[root@localhost ~]# date -d '2 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 '30 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 '50 days'

2013年 01月 27日 星期日 08:52:27 CST

說明:

date 命令的另外一個擴展是 -d 選項,該選項很是有用。使用這個功能強大的選項,經過將日期做爲引號括起來的參數提供,您能夠快速地查明一個特定的日期。-d 選項還能夠告訴您,相對於當前日期若干天的到底是哪一天,從如今開始的若干天或若干星期之後,或者之前(過去)。經過將這個相對偏移使用引號括起來,做爲 -d 選項的參數,就能夠完成這項任務。

具體說明以下:

date -d "nov 22"  今年的 11 月 22 日是星期三

date -d '2 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 '30 days ago' (30天前的日期)

使用負數以獲得相反的日期:

date -d 'dec 14 -2 weeks' (相對:dec 14這個日期的兩週前的日期)

date -d '-100 days' (100天之前的日期)

date -d '50 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 ~]#

說明:

 

 

二、舉例date                       # 以默認格式顯示當前日期
date -d "1 day"            # 以默認格式顯示一天後的日期(還能夠 second,minute,..直到year,能夠加s表示複數)
date -d "1970-01-01 UTC 1128621784 seconds"    # 以默認格式顯示從1970-01-01 UTC起後1128621784秒的日期
date -d "3 day ago" +%Y%m%d    # 以指定格式顯示3天前的日期
date -d "1 month" +%Y-%m-%d    # 以指定格式顯示一個月後的日期
date -d "1 month" +%s          # 以指定格式顯示一個月後的日期(此格式爲從1970年1月1日00:00:00到目前經歷的秒數,%S爲當前的秒數(0~59))
date -d "1970-01-01 CST 1 second" +%s   # 顯示從1970-01-01 CST起1秒後的秒數(-28799,注意時區"CST")
date -d "2 hours"                # 2小時前
date -d "1 minutes"             # 1分鐘前
date -d "2 seconds"             # 2秒鐘前date -d "20120616" +%s          # 以指定格式顯示日期
將時間戳轉換成date
#date -d '1970-01-01 UTC 1199116800 seconds'
2008年 01月 01日 星期二 00:00:00 CST

#export
#date -d '19700101 UTC 1199116800 seconds'  
Tue Jan  1 00:00:00 CST 2008mi 

 

只輸入date,顯示當前時間

-d 或 --date 用來顯示某個特定日期時間,而且能夠格式輸出

 

 

好似很簡單的命令,G了一大圈才找到,記下幾種方式供你們借鑑,有好的其餘命令歡迎跟貼:
設置系統時間爲2007年4月14日13點58分的命令

date -s "20070414 13:58:00"

date -s "2007-04-14 13:58:00"

date -s "2007/04/14 13:58:00"

開始的時候忘記加引號了,暈。

 

 

在命令行輸入:
Date:顯示當前時間 Fri Aug 3 14:15:16 CST 2007
date –s:按字符串方式修改時間
能夠只修改日期,不修改時間,輸入: date -s 2007-08-03
只修改時間,輸入:date -s 14:15:00
同時修改日期時間,注意要加雙引號,日期與時間之間有一空格,輸入:
#date -s "2007-08-03 14:15:00"
二、查看硬件時間
# hwclock
設置硬件時間
# hwclock -set -date="07/07/06 10:19" (月/日/年 時:分:秒)
三、硬件時間和系統時間的同步
按照前面的說法,從新啓動系統,硬件時間會讀取系統時間,實現同步,可是在不從新啓動的時候,須要用hwclock命令實現同步。
硬件時鐘與系統時鐘同步:
# hwclock --hctosys(hc表明硬件時間,sys表明系統時間)
系統時鐘和硬件時鐘同步:(讓系統的時間同步到硬件時鐘)
# hwclock –systohc

 

 

 

擴展閱讀一:hwclock 使用

 

Linux機器上的時間比較複雜,有各式各樣的時鐘和選項等等。

 

一:

機器裏有兩個時鐘:硬件時鐘和系統時鐘

硬件時鐘從根本上講是CMOS時鐘;

系統時鐘是由內核維護的,它是從1969年底(即傳說中的標誌Unix時代開端的那個拂曉)開始算起的累積秒數。

 

在DOS或Mac系統中,起做用的是硬件時鐘。遺憾的是,你可能已經發現了,絕大多數電腦時鐘都是很不許確的。它們從根本上講是由小型電池供電的警報器時鐘,這種鋰電池通常可持續供電三年左右,那時候你係統各大塊差很少都已通過時了。

 

而在Linux系統中,起做用的是系統時鐘。在啓動時,它靠讀取硬件時鐘得到計時起點,而不是靠記憶計時。

 

你能夠經過BIOS修改系統硬件時鐘,或者若是你不想重起機器,那就用hwclock命令。

 

當你使用hwclock命令調整硬件時間不少次之後,hwclock就會獲取你的時鐘推移速率,而後就會把這個信息存在/etc/adjtime裏邊。之後,你就能夠用它來隨時更新你的硬件時間,用一條下面的命令:

 

hwclock --adjust

 

硬件時鐘一般被設置成全球標準時間(UTC),而將時區信息保存在/usr/share/lib/timezone (或者在某些系統中多是/usr/local/timezone)目錄下某個適當的文件中,而後用一個符號連接文件/etc/localtime指向它。

 

查看硬件時鐘用命令:

 

hwclock --show 或者 hwclock -r

 

重置硬件時鐘用:

#date 042817252009.00 //設置系統時鐘 2009 年 04 月 28 日 星期四 17:25:00 CST

#hwclock -w

 

若是須要修改你的時區信息,可使用tzset命令,若是你係統中沒有這條命令,那能夠用相似下面的操做:

 

ln -s /etc/localtime /usr/share/zoneinfo/US/Pacific

 

二:

實例:

板子上電

#date 042817252009.00 //設置系統時鐘 2009 年 04 月 28 日 星期四 17:25:00 CST

#hwclock -w //將系統時鐘寫入硬件時鐘

#hwclock -r //看時間是否在變化

若是沒有出錯, 就已經把2009 年 04 月 28 日 星期四 17:25:00 CST 寫入RTC chip了

 

爲了使系統時間和RTC時間同步,能夠在初始化文件中添加命令

hwclock –s

使每次開機時讀取RTC時間,並同步給系統時間。

在根文件系統:usr/etc/rc.local中添加

/sbin/hwclock -s

 

斷電

等2分鐘在上電

#hwclock -r //看時間是否同步,即便與2分鐘後的時間相同

 

擴展閱讀二:linux中時間設置date、hwclock、clock

 

 

 

Windows時鐘你們可能十分熟悉了,Linux時鐘在概念上相似Windows時鐘顯示當前系統時間,但在時鐘分類和設置上卻和Windows截然不同。和Windows不一樣的是,Linux將時鐘分爲系統時鐘(System Clock)和硬件(Real Time Clock,簡稱RTC)時鐘兩種。系統時間是指當前Linux Kernel中的時鐘,而硬件時鐘則是主板上由電池供電的那個主板硬件時鐘,這個時鐘能夠在BIOS的"Standard BIOS Feture"項中進行設置。

 

既然Linux有兩個時鐘系統,那麼你們所使用的Linux默認使用哪一種時鐘系統呢?會不回出現兩種系統時鐘衝突的狀況呢?這些疑問和擔憂不無道理。首先,Linux並無默認哪一個時鐘系統。當Linux啓動時,硬件時鐘會去讀取系統時鐘的設置,而後系統時鐘就會獨立於硬件運做。

 

從Linux啓動過程來看,系統時鐘和硬件時鐘不會發生衝突,但Linux中的全部命令(包括函數)都是採用的系統時鐘設置。不只如此,系統時鐘和硬件時鐘還能夠採用異步方式,即系統時間和硬件時間能夠不一樣。這樣作的好處對於普通用戶意義不大,但對於Linux網絡管理員卻有很大的用處。例如,要將一個很大的網絡中(跨越若干時區)的服務器同步,假如位於美國紐約的Linux服務器和北京的Linux服務器,其中一臺服務器無須改變硬件時鐘而只需臨時設置一個系統時間,如要將北京服務器上的時間設置爲紐約時間,兩臺服務器完成文件的同步後,再與原來的時鐘同步一下便可。這樣系統和硬件時鐘就提供了更爲靈活的操做。

 

在Linux中,用於時鐘查看和設置的命令主要有date、hwclock和clock。其中,clock和hwclock用法相近,只不過clock命 令除了支持x86硬件體系外,還支持Alpha硬件體系。因爲目前絕大多數用戶使用x86硬件體系,因此能夠視這兩個命令爲一個命令來學習。

 

    1.在虛擬終端中使用date命令來查看和設置系統時間

    查看系統時鐘的操做:

    # date

 

    設置系統時鐘的操做:

    # date 091713272003.30

 

    通用的設置格式:

    # date 月日時分年.秒

 

    2.使用hwclock或clock命令查看和設置硬件時鐘

    查看硬件時鐘的操做:

    # hwclock --show 或

    # clock --show

    2003年09月17日 星期三 13時24分11秒 -0.482735 seconds

 

    設置硬件時鐘的操做:

    # hwclock --set --date="09/17/2003 13:26:00"

 

    或者

    # clock --set --date="09/17/2003 13:26:00"

 

    通用的設置格式:hwclock/clock --set --date=「月/日/年時:分:秒」。

 

    3.同步系統時鐘和硬件時鐘

 

    Linux系統(筆者使用的是Red Hat 8.0,其它系統沒有作過實驗)默認重啓後,硬件時鐘和系統時鐘同步。若是不大方便從新啓動的話(服務器一般不多重啓),使用clock或hwclock命令來同步系統時鐘和硬件時鐘。

 

    硬件時鐘與系統時鐘同步:

    # hwclock --hctosys

 

    或者

    # clock --hctosys

 

    上面命令中,--hctosys表示Hardware Clock to SYStem clock。

 

    系統時鐘和硬件時鐘同步:

    # hwclock --systohc

 

    或者

    # clock --systohc

 

本篇文章來源於 Linux公社網站(www.linuxidc.com)  原文連接:http://www.linuxidc.com/Linux/2012-09/69914p2.htm

 

 

我使用過的Linux命令之hwclock - 查詢和設置硬件時鐘

本文連接:http://codingstandards.iteye.com/blog/804830   (轉載請註明出處)

 

用途說明

hwclock命令,與clock命令是同一個命令,主要用來查詢和設置硬件時鐘(query and set the hardware clock (RTC))。RTC=Real Time Clock,也就是硬件時鐘。在Linux中有硬件時鐘與系統時鐘等兩種時鐘。硬件時鐘是指主機板上的時鐘設備,也就是一般可在BIOS畫面設定的時鐘。系統時鐘則是指kernel中 的時鐘。全部Linux相關指令與函數都是讀取系統時鐘的設定。由於存在兩種不一樣的時鐘,那麼它們之間就會存在差別。根據不一樣參數設置,hwclock命令既能夠將硬件時鐘同步到系統時鐘,也能夠將系統時鐘同步到硬件時鐘。

關於系統時鐘與硬件時鐘的關係的說法,網上分紅了兩種:

第一種:當Linux啓動時,硬件時鐘會去讀取系統時鐘的設置,而後系統時鐘就會獨立於硬件運做。

第二種:當Linux啓動時,系統時鐘會去讀取硬件時鐘的設定,以後系統時鐘即獨立運做。

到底那一種纔是正確的呢?執行一下man hwclock能夠看到裏面有一段:

man hwclock 寫道

The System Time is the time that matters.  The Hardware Clock’s basic purpose in a Linux system is to keep time
      when Linux is not running.  You initialize the System Time to the time  from  the  Hardware  Clock  when  Linux
      starts  up,  and  then  never  use the Hardware Clock again.  Note that in DOS, for which ISA was designed, the
      Hardware Clock is the only real time clock.

這段文字說明,第二種說法是正確的,第一種說法是錯誤的。但網上大部分文章都是第一種說法,因此說,網絡雖好,要注意甄別。

man hwclock 寫道

It is important that the System Time not have any discontinuities such as would happen if you used the date(1L)
      program  to  set  it while the system is running.  You can, however, do whatever you want to the Hardware Clock
      while the system is running, and the next time Linux starts up, it will do so with the adjusted time  from  the
      Hardware  Clock.

若是使用date命令修改了系統時間,並不會自動去修改硬件時鐘,所以,當系統下次重啓時,系統時鐘還會從硬件時鐘去取,date設置的時間就無效了。這大概就是爲何須要hwclock命令的緣由吧。

經常使用參數

  -r, --show         讀取並打印硬件時鐘(read hardware clock and print result )
  -s, --hctosys      將硬件時鐘同步到系統時鐘(set the system time from the hardware clock )
  -w, --systohc     將系統時鐘同步到硬件時鐘(set the hardware clock to the current system time )

使用示例

示例一 hwclock命令與clock命令是一個東西

[root@new55 ~]# type -a hwclock
hwclock is /sbin/hwclock
hwclock is /usr/sbin/hwclock
[root@new55 ~]# ls -l /sbin/hwclock /usr/sbin/hwclock
-rwxr-xr-x 1 root root 34096 2010-01-07 /sbin/hwclock
lrwxrwxrwx 1 root root    18 08-13 00:14 /usr/sbin/hwclock -> ../../sbin/hwclock

[root@new55 ~]# type -a clock
clock is /sbin/clock
[root@new55 ~]# ls -l /sbin/clock
lrwxrwxrwx 1 root root 7 08-13 00:14 /sbin/clock -> hwclock
[root@new55 ~]#

示例二 顯示硬件時鐘

[root@new55 ~]# hwclock
2010年11月06日 星期六 21時09分28秒  -0.134840 seconds
[root@new55 ~]# hwclock -r
2010年11月06日 星期六 21時09分33秒  -0.469123 seconds
[root@new55 ~]# hwclock --show
2010年11月06日 星期六 21時09分45秒  -0.127548 seconds
[root@new55 ~]#

 

示例三 修改日期並同步到硬件時鐘

[root@new55 ~]# date
2010年 11月 06日 星期六 21:11:57 CST
[root@new55 ~]# date 11062112     <== 格式 mmddHHMM,即 月日時分
2010年 11月 06日 星期六 21:12:00 CST
[root@new55 ~]# hwclock -w
[root@new55 ~]# hwclock
2010年11月06日 星期六 21時12分13秒  -0.648818 seconds
[root@new55 ~]#

 

注:要使系統時間準確,最好仍是使用ntp方式。

示例四 使用ntpdate命令從網絡同步時間,再同步到硬件時鐘

ntpdate命令是使用NTP協議來從網絡同步時間的命令。NTP=Network Time Protocol 網絡時間協議。

[root@new55 ~]# ntpdate 0.rhel.pool.ntp.org
 6 Nov 21:17:55 ntpdate[4829]: step time server 123.146.124.28 offset -1.025258 sec
[root@new55 ~]# date
2010年 11月 06日 星期六 21:17:59 CST
[root@new55 ~]# hwclock -w
[root@new55 ~]#

 

 

 

在Linux中有硬件時鐘與系統時鐘兩種時鐘。硬件時鐘是指主機板上的時鐘設備,也就是一般可在BIOS畫面設定的時鐘。系統時鐘則是指kernel中的時鐘。全部Linux相關指令與函數都是讀取系統時鐘的設定。由於存在兩種不一樣的時鐘,那麼它們之間就會存在差別。當Linux啓動時,系統時鐘會去讀取硬件時鐘的設定,以後系統時鐘即獨立運做。

用date命令對系統時間進行設置後,並不會去修改硬件時鐘,因此係統重啓後,系統時間還算會去讀取硬件時間,這就是爲什麼date設置失效到緣由。

所以,須要在設置系統時間後,將系統時間同步到硬件時鐘。

clock/hwclock:

顯示與設定硬件時鐘(query and set the hardware clock (RTC)),兩個命令相同。RTC=Real Time Clock,也就是硬件時鐘。

命令參數:

-r, --show        讀取並打印硬件時鐘(read hardware clock and print result)
-s, --hctosys     將硬件時鐘同步到系統時鐘(set the system time from the hardware clock)
-w, --systohc     將系統時鐘同步到硬件時鐘(set the hardware clock to the current system time)

命令示例:

1. 查看硬件時鐘

2014年03月27日 星期四 11時03分50秒  -0.328520 seconds
[root@localhost ~]# hwclock -r
2014年03月27日 星期四 11時03分53秒  -0.797264 seconds
[root@localhost ~]# hwclock --show
2014年03月27日 星期四 11時04分01秒  -0.672267 seconds

2. clock與hwclock相同


複製代碼
[root@localhost ~]# type -a hwclock
hwclock is /sbin/hwclock
hwclock is /usr/sbin/hwclock
[root@localhost ~]# ll /sbin/hwclock /usr/sbin/hwclock
-rwxr-xr-x. 1 root root 46940 11月 22 23:27 /sbin/hwclock
lrwxrwxrwx. 1 root root    18 3月  26 19:27 /usr/sbin/hwclock -> ../../sbin/hwclock
[root@localhost ~]# type -a clock
clock is /sbin/clock
[root@localhost ~]# ll /sbin/clock
lrwxrwxrwx. 1 root root 7 3月  26 19:27 /sbin/clock -> hwclock

複製代碼

3. 同步系統時間到硬件時鐘


複製代碼
[root@localhost ~]# hwclock
2014年03月27日 星期四 18時50分51秒  -0.312960 seconds
[root@localhost ~]# date
2014年 03月 27日 星期四 10:50:55 CST
[root@localhost ~]# hwclock -w
[root@localhost ~]# hwclock
2014年03月27日 星期四 10時51分15秒  -0.875387 seconds

複製代碼

同步網絡時間到系統時間

[root@localhost ~]# ntpdate 210.72.145.44
27 Mar 11:11:24 ntpdate[4766]: adjust time server 210.72.145.44 offset 0.011401 sec

210.72.145.44 (中國西安授時中心的官方時間同步服務器IP域名)

同步網絡時間到系統時間後,就能夠用hwclock -w將系統時間同步到硬件時間。

修改時區

可能部分系統在執行以上兩步後,在重啓後仍然失效,因此須要進行時區修改。

[root@localhost ~]# tzselect #按照提示進行選擇時區
[root@localhost ~]# ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime


修改系統時間配置文件

[root@localhost ~]# /etc/sysconfig/clock

#打開clock文件,將相關內容改爲如下內容
UTC=true
ARC=false
ZONE="Asia/Shanghai"

重啓系統

[root@localhost ~]# reboot

 

 

 

date  +%Y-%m-%d%t%A%t%T    能夠固定不過建議 使用 alias 進行設置 而不是去修改默認的date腳本。既alias date='date  +%Y-%m-%d%t%A%t%T '要使之後都生效 能夠到/etc/bashrc 設置 也能夠到用戶目錄下 設置 .bashrc 

 

date  +%Y%m%d%t%A%t%T

 

你能夠在在 某個啓動腳本里面加上下面這條命令,好比在 /etc/bashrc 腳本里面,加上
alias date="date \"+%Y-%m-%d %H:%M:%S\""
而後運行改文件,
. /etc/bashrc 

 

date  "+%Y-%m-%d %H:%M:%S"

 

做者:Agoly
出處:https://www.cnblogs.com/qmfsun/ 本文版權歸做者和博客園共有,歡迎轉載,但未經做者贊成必須保留此段聲明,且在文章頁面明顯位置給出原文鏈接,不然保留追究法律責任的權利。 若是文中有什麼錯誤,歡迎指出。以避免更多的人被誤導。
相關文章
相關標籤/搜索