linux下儲存時間常見的有兩種儲存方式,乙個是從2023年到現在經過了多少秒,乙個是用乙個結構來分別儲存年月日時分秒的。
time_t 這種型別就是用來儲存從2023年到現在經過了多少秒,要想更精確一點,可以用結構struct timeval,它精確到微妙。
struct timeval;
而直接儲存年月日的是乙個結構:
struct tm
;需要特別注意的是,年份是從2023年起至今多少年,而不是直接儲存如2023年,月份從0開始的,0表示一月,星期也是從0開始的, 0表示星期日,1表示星期一。
可參考:
即:linux下有三種型別表示時間,秒級別的time_t,毫/微秒級別的timeval,格式化時間tm,轉換關係如下;
下面介紹一下我們常用的時間函式:
#include
char *asctime(const struct tm* timeptr);
將結構中的資訊轉換為真實世界的時間,以字串的形式顯示
char *ctime(const time_t *timep);
將timep轉換為真是世界的時間,以字串顯示,它和asctime不同就在於傳入的引數形式不一樣
double difftime(time_t time1, time_t time2);
返回兩個時間相差的秒數
int gettimeofday(struct timeval *tv, struct timezone *tz);
返回當前距離2023年的秒數和微妙數,後面的tz是時區,一般不用
struct tm* gmtime(const time_t *timep);
將time_t表示的時間轉換為沒有經過時區轉換的utc時間,是乙個struct tm結構指標
stuct tm* localtime(const time_t *timep);
和gmtime類似,但是它是經過時區轉換的時間。
time_t mktime(struct tm* timeptr);
將struct tm 結構的時間轉換為從2023年至今的秒數
time_t time(time_t *t);
取得從2023年1月1日至今的秒數。
time, gmtime, asctime 所表示的時間都是utc時間,只是資料型別不一樣, 而
localtime, ctime 所表示
的時間都是經過時區轉換後
的時間,它和你用系統命令date所表示的cst時間應該保持一致
。%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 時區名稱,如果不能得到時區名稱則返回空字元。
%% 百分號
如果想顯示現在是幾點了,並以12小時制顯示,就象下面這段程式:
#include "time.h"
#include "stdio.h"
int main(void)
其執行結果為:
it is now 4pm
而下面的程式則顯示當前的完整日期:
#include
#include
#include
int main( void )
Linux C 時間與日期
linux下儲存時間常見的有兩種儲存方式,乙個是從1970年到現在經過了多少秒,乙個是用乙個結構來分別儲存年月日時分秒的。time t 這種型別就是用來儲存從1970年到現在經過了多少秒,要想更精確一點,可以用結構struct timeval,它精確到微妙。struct timeval 而直接儲存年...
時間與日期
通常確定時間和日期對乙個程式來說是很有用的,程式可能希望記錄執行時間.或者在某一時間後改變執行方式.例如乙個遊戲可能需要玩家在倒計時內完成某個任務 所有的 系統都使用同一時間和日期起點 格林威治時間 1970年1月1日.而 紀元開始於1980年.時間通過乙個長整型的預定義型別time t來表示,它和...
c 時間與日期
注意c 11有更強大的方法!隨機數及atoi include int abs int num 功能 函式返回引數num.的絕對值。double atof const char str 功能 將字串str轉換成乙個雙精度數值並返回結果。int atoi const char str 功能 將字串str...