linux 時間轉換

來源:互聯網
上載者:User

標籤:

引言 :今天寫code 遇到一個 時間轉換的 突然對轉換函式不太確定 翻開之前的記錄 看了一下 然後順便發到這裡來

一:資料結構

linux下儲存時間常見的有兩種儲存方式,一個絕對秒數,一個是用一個結構來分別儲存年月日時分秒的

標頭檔 #include <time.h>

typedef long  time_t;   // 其實time_t 就是long 類型  長整型     time函數可以擷取從1970年到現在經過了多少

struct tm {

     int tm_sec; /* 秒–取值區間為[0,59] */

     int tm_min; /* 分 - 取值區間為[0,59] */

int tm_hour; /* 時 - 取值區間為[0,23] */int tm_mday; /* 一個月中的日期 - 取值區間為[1,31] */int tm_mon; /* 月份(從一月開始,0代表一月) - 取值區間為[0,11] */int tm_year; /* 年份,其值從1900開始 */int tm_wday; /* 星期–取值區間為[0,6],其中0代表星期天,1代表星期一,以此類推 */int tm_yday; /* 從每年的1月1日開始的天數–取值區間為[0,365],其中0代表1月1日,1代表1月2日,以此類推 */int tm_isdst; /* 夏令時標識符,實行夏令時的時候,tm_isdst為正。不實行夏令時的進候,tm_isdst為0;不瞭解情況時,tm_isdst()為負。*/long int tm_gmtoff; /*指定了日期變更線東面時區中UTC東部時區正秒數或UTC西部時區的負秒數*/const char *tm_zone; /*當前時區的名字(與環境變數TZ有關)*/};
二:函數(歸類記憶)返回秒數 區別在於mktime 可以返回順便 tm結構的1:time()         函數返回自 Unix 紀元(January 1 1970 00:00:00 GMT)起的目前時間的秒數 2:time_t mktime(struct tm * timeptr);  將時間轉換為自1970年1月1日以來期間的秒數返回字串 區別在於傳入參數不一樣 3:char *asctime(const struct tm* timeptr);      將結構中的資訊轉換為真實世界的時間,以字串的形式顯示 4:char *ctime(const time_t *timep);  將timep轉換為真是世界的時間,以字串顯示返回tm結構 區別在於 localtime 返回當前時區 5:struct tm* gmtime(const time_t *timep);    將time_t表示的時間轉換為沒有經過時區轉換的UTC時間(0時區) 6:struct tm* localtime(const time_t *timep);  和gmtime類似,但是它是經過時區轉換的時間 返回當前時區     

        PS:  UTC (世界協調時間) 相當於本初子午線(即經度0度)上的平均太陽時稱0時區        

                GMT (格林威治)         跟UTC一樣 北京在東八區,北京時間領先於utc八個小時

                DST (夏日節約時間)我見的比較少  度娘了一下 是指在夏天太陽升起的比較早時,將時鐘撥快一小時,以提早日光的使 用,

                在英國則稱為夏 令 時間(Summer Time),也可能就是為什麼美國波士頓夏天時候跟中國相差12小時 冬天相差13                         

                CST(中部標準時間) 重點說一下這個  一般來說 我們在linux 下 用date 命令 顯示的都是 cst 格式的
                其實 cst 不單單代表中國時間  其實 代表了 美國 澳大利亞  古巴 中國 4個市區時間 

             CST Central Standard Time (USA) UT-6:00
             CST Central Standard Time (Australia) UT+9:30
             CST China Standard Time UT+8:00
             CST Cuba Standard Time UT-4:00
                linux下是通過/etc/localtime這個硬串連指向的/usr/share/zoneinfo下的時區檔案表示當前的真正時區
                例如/etc/localtime指向了/usr/share/zoneinfo/Asia/Shanghai這個檔案的時候,CST就代表了中國標準時間。
                cp 命令copy也是可以 例如 
                [[email protected] ~]# cp /usr/share/zoneinf/Asia/Shanghai  /etc/localtime  //複製相應的時區檔案
                [[email protected] ~]# hwclock //寫入BIOS,避免重啟失效


三:舉例

1:顯示目前時間  常見的格式 Fri Jan 11 17:25:24 2014     

 #include <stdio.h> #include <stdlib.h> #include <time.h> int main() {       time_t timep;       time(&timep); /*擷取time_t類型的目前時間*/       printf("%s", asctime(gmtime(&timep)));/*用gmtime將time_t類型的時間轉換為struct tm類型的時間按,*/       printf("%s", ctime(&timep));//這個比較對 因為轉了時區跟date 比較一致       return 0;  }


2: 絕對秒數轉相應格式  time_t 秒數結構---->localtime  tm結構 ------>asctime 轉成字串
                                      time_t 秒數結構---->localtime  tm結構 ------>strftime 轉格式

#include <stdio.h>#include <stdlib.h>#include <time.h>int main(){    time_t timep;    struct tm *test = NULL;    char tm[100];    timep = 1378742400;    printf("%s\n",asctime(localtime(&time));//轉 字串格式    struct tm *tmtest = NULL;    test = localtime(&timep);    if(strftime(tm, sizeof(tm), "%Y-%m-&d %H:%M:%S",test))       return -1;    printf("%s\n", tm);    return 0;}     

 
3:字串轉絕對秒數  最後都是用到mktime轉為絕對秒數  代碼不舉例了 



linux 時間轉換

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.