十年磨一劍

跳到主文

邁向中鳥階段-Embedded Arm Linux 嵌入式系統開發與學習,歡迎各位同好的交流。

部落格全站分類:數位生活

  • 相簿
  • 部落格
  • 留言
  • 名片
  • 6月 05 週五 200916:45
  • [轉載整理]Linux系統時間

在linux中如何讀取並修改系統時間?

 [root@linux ]# date MMDDhhmmYYYY
參數:
MM:月份
DD:日期
hh:小時
mm:分鐘
YYYY:西元年
 
1. 修改時間成為 1 小時後的時間該如何是好?
[root@linux ]# date
Thu Dec  7 15:36:45 CST 2006
 
[root@linux ]# date 120716362006
Thu Dec  7 16:36:00 CST 2006
# 瞧!時間立刻就修改過來了!

 

[root@linux ]# hwclock [-rw]
參數:
-r :亦即 read ,讀出目前 BIOS 內的時間參數;
-w :亦即 write ,將目前的 Linux 系統時間寫入 BIOS 當中啊!
 
2. 查閱 BIOS 時間,並且寫入更改過的時間囉!
[root@linux ]# hwclock -r
Thu Dec  7 15:37:44 2006  -0.627128 seconds
# 看一看,是否剛好差異約一個小時啊!這就是 BIOS 時間!
 
[root@linux ]# hwclock -w
# 這樣就寫入囉很簡單吧!

 


Linux程式設計-時間處理

UNIX及Linux的時間系統是由「新紀元時間」Epoch開始計算起,單位為秒,Epoch則是指定為1970年一月一日凌晨零點零分零秒,格林威治時間。 
目前大部份的UNIX系統都是用32位元來記錄時間,正值表示為1970以後,負值則表示1970年以前。

 

在所有的UNIX下,都有個time()的函數 
#include  

time_t time(time_t *t); 

 

這個函數會傳回從epoch開始計算起的秒數,如果t是non-null,它將會把時間值填入t中。

 

#include <time.h>

#include <stdio.h>

#include <unistd.h>

#include <stdlib.h>

 

int main()

{

    int i;

    time_t the_time;

 

    for(i = 1; i <= 10; i++) {

        the_time = time((time_t *)0);

        printf("The time is %ld\n", the_time);

        sleep(2);

    }

    exit(0);

}

這個程式執行完之後會獲得一長串的數字如:191317

對他做時間的乘除獲得的結果會跟你當時執行此程式時的系統時間一樣。

後面會介紹一些整理此串數字的函數,以利程式設計者能夠更方便的解讀。

 


時間表述 

電腦使用秒及epoch來表示其時間,但對人腦來說實在太殘忍一點,大概沒有人可以用人腦來計算。因此,UNIX下提供了其它兩種基本方式來表述時間,struct tm及文字格式時間。 

 

struct tm 
{ 
    int tm_sec; 
    int tm_min; 
    int tm_hour; 
    int tm_mday; 
    int tm_mon; 
    int tm_year; 
    int tm_wday; 
    int tm_yday; 
    int tm_isdst; 
}; 

tm_sec
表「秒」數,在[0,61]之間,多出來的兩秒是用來處理跳秒問題用的。 
tm_min
表「分」數,在[0,59]之間。 
tm_hour
表「時」數,在[0,23]之間。 
tm_mday
表「本月第幾日」,在[1,31]之間。 
tm_mon
表「本年第幾月」,在[0,11]之間。 
tm_year
要加1900表示那一年。 
tm_wday
表「本第幾日」,在[0,6]之間。 
tm_yday
表「本年第幾日」,在[0,365]之間,閏年有366日。 
tm_isdst
表是否為「日光節約時間」。 

struct tm
格式時間函數 

struct tm * gmtime(const time_t * t); 
轉換成格林威治時間。有時稱為GMT或UTC。 

struct tm * localtime(const time_t *t); 
轉換成本地時間。它可以透過修改TZ環境變數來在一台機器中,不同使用者表示不同時間。 

time_t mktime(struct tm *tp); 
轉換tm成為time_t格式,使用本地時間。 

tme_t timegm(strut tm *tp); 
轉換tm成為time_t格式,使用UTC時間。 

double difftime(time_t t2,time_t t1); 
計算秒差。 

文字時間格式函數 

char * asctime(struct tm *tp); 
char * ctime(struct tm *tp); 
這兩個函數都轉換時間格式為標準UNIX時間格式。 
Mon May 3 08:23:35 1999 

ctime
一率使用當地時間,asctime則用tm結構內的timezone資訊來表示。 

size_t strftime(char *str,size_t max,char *fmt,struct tm *tp); 
strftime
有點像sprintf,其格式由fmt來指定。 

%a : 
本第幾天名稱,縮寫。 
%A : 
本第幾天名稱,全稱。 
%b : 
月份名稱,縮寫。 
%B : 
月份名稱,全稱。 
%c : 
與ctime/asctime格式相同。 
%d : 
本月第幾日名稱,由零算起。 
%H : 
當天第幾個小時,24小時制,由零算起。 
%I : 
當天第幾個小時,12小時制,由零算起。 
%j : 
當年第幾天,由零算起。 
%m : 
當年第幾月,由零算起。 
%M : 
該小時的第幾分,由零算起。 
%p : AM
或PM。 
%S : 
該分鐘的第幾秒,由零算起。 
%U : 
當年第幾,由第一個日開始計算。 
%W : 
當年第幾,由第一個一開始計算。 
%w : 
當第幾日,由零算起。 
%x : 
當地日期。 
%X : 
當地時間。 
%y : 
兩位數的年份。 
%Y : 
四位數的年份。 
%Z : 
時區名稱的縮寫。 
%% : %
符號。 

char * strptime(char *s,char *fmt,struct tm *tp); 
如同scanf一樣,解譯字串成為tm格式。 

%h : 
與%b及%B同。 
%c : 
讀取%x及%X格式。 
%C : 
讀取%C格式。 
%e : 
與%d同。 
%D : 
讀取%m/%d/%y格式。 
%k : 
與%H同。 
%l : 
與%I同。 
%r : 
讀取"%I:%M:%S %p"格式。 
%R : 
讀取"%H:%M"格式。 
%T : 
讀取"%H:%M:%S"格式。 
%y : 
讀取兩位數年份。 
%Y : 
讀取四位數年份。 

 

資料來源:

http://jyhshin.pixnet.net/blog/post/27749433

http://fanqiang.chinaunix.net/a4/b8/20010527/201001267_b.html

linux程式設計教學手冊(第四版)

http://linux.vbird.org/linux_server/0440ntp.php#client

 

文章標籤
全站熱搜
創作者介紹
創作者 flykof 的頭像
flykof

十年磨一劍

flykof 發表在 痞客邦 留言(0) 人氣(30,384)

  • 全站分類:
  • 個人分類:linux
▲top

個人資訊

flykof
暱稱:
flykof
分類:
數位生活
好友:
累積中
地區:

熱門文章

  • ()RS232簡單接法(3線)
  • ()Ubuntu下samba安裝設定
  • ()[轉載整理]What is tty?
  • ()使用Busybox建立Linux檔案系統使用Busybox
  • ()U-boot指令
  • ()[轉載整理]Linux系統時間
  • ()ubunto下安裝設定NFS
  • ()談談Unicode編碼
  • ()在QT中好用的字串陣列QStringList
  • ()Linux Device Drivers 使用/proc檔案系統

文章分類

toggle Embedded (4)
  • S3C2410 (0)
  • WinCE-s3c2410 (0)
  • cortex-m3 (0)
  • 菜鳥的嵌入式系統 (0)
toggle Linux (3)
  • Linux Device Drivers (0)
  • linux (0)
  • ubuntu (0)
toggle C/C (2)
  • C/C (0)
  • 原創Function (0)
toggle QT (1)
  • QT (0)
toggle Error (1)
  • error (0)
toggle 網際網路 (2)
  • PPP (0)
  • 網際網路 (0)
toggle 資訊 (2)
  • RFID (0)
  • Embedded (0)
toggle 網頁設計 (2)
  • CGI (0)
  • Javascript (0)
  • SQL (0)
  • 未分類文章 (1)

最新文章

    最新留言

    文章精選

    文章搜尋

    誰來我家

    flykof
    PIXNET Logo登入

    參觀人氣

    • 本日人氣:0
    • 累積人氣:636,006