<C++>擷取並顯示目前時間

來源:互聯網
上載者:User

標籤:c++目前時間   time   日曆時間   

一、首先,我們要分清楚幾個概念:
1、Coordinated Universal Time(UTC):國際標準時間,又稱為世界標準時間,也就是格林威治標準時間(Greenwich Mean Time,GMT)。比如,中國內地的時間與UTC的時差為+8,也就是UTC+8。美國是UTC-5。以年、月、日、時、分、秒錶示

2、Calendar Time:日曆時間,是用“從一個標準時間點(如:1970年1月1日0時0分0秒)到此時的時間經過的秒數”來表示的時間。可以說日曆時間是“相對時間”,但是無論你在哪一個時區,在同一時刻對同一個標準時間點來說,日曆時間都是一樣的。 以秒錶示

3、local time:當地時間:中國就是北京時間

二、與日期和時間相關的資料結構
在標準C/C++中,我們可通過tm結構來獲得日期和時間,tm結構在time.h中的定義如下:

#ifndef _TM_DEFINEDstruct **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()為負。*/#define _TM_DEFINED#endif

ANSI C標準稱使用tm結構的這種時間表示為分解時間(broken-down time)。

日曆時間(Calendar Time)是通過time_t資料類型來表示的,用time_t表示的時間(日曆時間)是從一個時間點(例如:1970年1月1日0時0分0秒)到此時的秒數。在time.h中,我們也可以看到time_t是一個長整型數

#ifndef _TIME_T_DEFINEDtypedef long time_t;      /* 時間值 */#define _TIME_T_DEFINED;  /* 避免重複定義 time_t */#endif

與時間日期相關的函數:

    asctime(); 將時間和日期以字串格式表示,只是把tm結構對象中的各個域**填到時間字串的相應位置**,可顯示世界時間和本地時間    ctime(); 把日期和時間轉換為字串   自動把世界時間轉化為本地時間再顯示    gmtime(); 把日期和時間轉換為(GMT)時間    localtime(); 取得當地目前時間和日期    mktime(); 將時間結構資料轉換成經過的秒數    strftime(); 將時間格式化    time(); 取得日曆時間:從1970年1月1日0時0分0秒到此時的秒數" 啟動並執行結果與當時的時間有關    strftime();將時間格式化為我們想要的格式    clock(); 確定處理器時間  可用來計算某段程式執行的時間    difftime(); 計算兩個時刻之間的時間差

程式如下:

#include <iostream>#include <time.h>  /* time_t, struct tm, time,                                                  localtime, asctime */using namespace std;int main(){    /*————————————獲得日曆時間——————————————————————*/    time_t rawtime;    time(&rawtime);       cout  << time(&rawtime) << endl;       /*————————轉換日曆時間,獲得世界時間和當地時間————————*/    struct tm * timeinfo;    timeinfo = localtime(&rawtime);      cout << "localtime  當地時間:" << timeinfo->tm_hour << endl;    timeinfo = gmtime(&rawtime);      cout << "gmtime  世界時間:" << timeinfo->tm_hour << endl << endl;    /*——————————將時間以固定格式顯示  如:Wed Jan 02 02:03:55 1980/n/0——————————————————————*/    cout << "asctime 顯示時間(當地、世界)" << asctime(timeinfo) << endl;//     cout << "ctime 自動把世界時間轉化為本地時間再顯示 "<<ctime(&rawtime) << endl;    /*————————————自訂時間格式——————————————————————*/    cout << timeinfo->tm_hour << ":" << timeinfo->tm_min << ":" << timeinfo->tm_sec << endl;    char   pblgtime[20];    strftime(pblgtime, 20, "%Y-%m-%d %X", localtime(&rawtime));    cout << "strftime   " << pblgtime << endl;    return 0;

運行結果:
其中函數strftime()的操作有些類似於sprintf():識別以百分比符號(%)開始的格式命令集合,格式化輸出結果放在一個字串中。格式化命令說明串strDest中各種日期和時間資訊的確切表示方法。格式串中的其他字元原樣放進串中。格式命令列在下面,它們是區分大小寫。

%a 星期幾的簡寫%A 星期幾的全稱%b 月分的簡寫%B 月份的全稱%c 標準的日期的時間串%C 年份的後兩位元字%d 十進位表示的每月的第幾天%D 月/天/年%e 在兩字元域中,十進位表示的每月的第幾天%F 年-月-日%g 年份的後兩位元字,使用基於周的年%G 年分,使用基於周的年%h 簡寫的月份名%H 24小時制的小時%I 12小時制的小時%j 十進位表示的每年的第幾天%m 十進位表示的月份%M 十時製表示的分鐘數%n 新行符%p 本地的AM或PM的等價顯示%r 12小時的時間%R 顯示小時和分鐘:hh:mm%S 十進位的秒數%t 水平定位字元%T 顯示時分秒:hh:mm:ss%u 每周的第幾天,星期一為第一天 (值從0到6,星期一為0)%U 第年的第幾周,把星期日做為第一天(值從0到53)%V 每年的第幾周,使用基於周的年%w 十進位表示的星期幾(值從0到6,星期天為0)%W 每年的第幾周,把星期一做為第一天(值從0到53)%x 標準的日期串%X 標準的時間串%y 不帶世紀的十進位年份(值從0到99)%Y 帶世紀部分的十進位年份%z,%Z 時區名稱,如果不能得到時區名稱則返回Null 字元。%% 百分比符號

另外可參考部落格:http://blog.csdn.net/limi0066/article/details/1761564

<C++>擷取並顯示目前時間

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.