




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
第第頁LinuxC語言時間相關知識總結大家好,我是(Linux)Zn。
實際開發中,經常要獲取各種時間。下面匯總幾個常用的時間接口:
1、clock_get(ti)me
#include
/**
*
@brief
根據系統(時鐘)的類型,獲取當前時間
*
*
Det(ai)led
function
description
*
*
@pa(ram)[in]
__clock_id:
系統時鐘的類型。常用取值:
-
CLOCK_REALTIME:
從1970年1月1日到目前的時間
-
CLOCK_MONOTONIC:
系統啟動時間
-
CLOCK_PROCESS_(CPU)TIME_ID:
本進程運行時間
-
CLOCK_THRE(AD)_CPUTIME_ID:
本線程運行的時間
*
@param[out]
__tp:
存放當前的時間。
*
*
@return
成功則返回0,失敗則返回-1
*/int
clock_gettime
(clockid_t
__clock_id,
struct
timespec
*__tp);
timespec結構體:
struct
timespec{
__time_t
tv_sec;
/*
Seconds.
秒
*/
__syscall_slong_t
tv_nsec;
/*
Nanoseconds.
納秒*/};
例子:
#include
#include
#include
long
long
get_clock_sys_time_ns(void){
struct
timespec
tp;
long
long
time_ns
=
0;
clock_gettime(CLOCK_MONOTONIC,
time_ns
=
(long
long)tp.tv_sec
*
1000000000
+
tp.tv_nsec;
return
time_ns;}int
main(void){
struct
timespec
tp;
///
編譯、運行:
2、gettimeofday
#include
/**
*
@brief
獲取當前時間(從1970年1月1日到目前的時間)
*
*
Detailed
function
description
*
*
@param[out]
tv:
當前UTC時間
*
@param[out]
tz:
當前時區信息
*
*
@return
成功則返回0,失敗則返回-1
*/int
gettimeofday(struct
timeval
*tv,
struct
timezone
*tz);
timeval結構體:
struct
timeval{
__time_t
tv_sec;
/*
Seconds.
秒*/
__suseconds_t
tv_usec;
/*
Microseconds.
微秒*/};
timezone結構體:
struct
timezone
{
int
tz_minu(te)swest;
/*
Minutes
west
of
GMT.
和Greenwich時間差了多少分鐘
*/
int
tz_dsttime;
/*
Nonzero
if
DST
is
ever
in
effect.
日光節約時間的狀態
*/
};
例子:
#include
#include
#include
long
long
get_sys_time_ms(void){
long
long
time_ms
=
0;
struct
timeval
tv;
gettimeofday(
time_ms
=
((long
long)tv.tv_sec*1000000
+
tv.tv_usec)
/
1000;
return
time_ms;}int
main(void){
///
編譯、運行:
3、time
#include
/**
*
@brief
獲取1970-01-01
0000
+0000至今的秒數(UTC)
*
*
Detailed
function
description
*
*
@param[out]
tloc:
返回的秒存儲指針
*
*
@return
成功則返回秒數,失敗則返回-1,錯誤原因存在errno中。
*/time_t
time(time_t
*tloc);
time_t的類型:
typedef
long
time_t;
例子:
#include
#include
time_t
get_utc_time(void){
return
time(NULL);}int
main(int
argc,
char
**argv){
time_t
utc_time
=
get_utc_time();
printf("utc_time
=
%ld
s",
utc_time);
return
0;}
編譯、運行:
4、localtime
#include
/**
*
@brief
將time_t類型的時間轉換為struct
tm類型的時間
*
*
Detailed
function
description
*
*
@param[in]
timep:
當前UTC秒數
*
*
@return
返回當地時間
*/struct
tm
*localtime(const
time_t
*timep);
tm結構體:
struct
tm{
int
tm_sec;
/*
Seconds.
[0-60]
(1
leap
second)
*/
int
tm_min;
/*
Minutes.
[0-59]
*/
int
tm_hour;
/*
Hou(rs).
[0-23]
*/
int
tm_mday;
/*
Day.
[1-31]
*/
int
tm_mon;
/*
Month.
[0-11]
注意:0代表1月,以此類推*/
int
tm_year;
/*
Year
-
1900.
該值為實際年份減去1900*/
int
tm_wday;
/*
Day
of
week.
[0-6]
注意:0代表星期一,以此類推*/
int
tm_yday;
/*
Days
in
year.[0-365]
從每年的1月1日開始的天數,其中0代表1月1日,以此類推*/
int
tm_isdst;
/*
DST.
[-1/0/1]
夏玲時標識符*/};
例子:
#include
#include
time_t
get_utc_time(void){
return
time(NULL);}int
main(int
argc,
char
**argv){
time_t
utc_time
=
get_utc_time();
printf("utc_time
=
%ld
s",
utc_time);
struct
tm
*local_tm
=
localtime(
printf("local
time
=
%.4d-%.2d-%.2d
%.2d:%.2d:%.2d",
local_tm->tm_year
+
1900,
local_tm->tm_mon
+
1,
local_tm->tm_mday,
local_tm->tm_hour,
local_tm->tm_min,
local_tm->tm_sec);
return
0;}
編譯、運行:
5、localtime_r
#include
/**
*
@brief
將time_t類型的時間轉換為struct
tm類型的時間
*
*
Detailed
function
description
*
*
@param[in]
timep:
當前UTC秒數
*
@param[out]
timep:
當地時間
*
*
@return
返回當地時間
*/struct
tm
*localtime_r(const
time_t
*timep,
struct
tm
*result);
localtime不是一個線程安全的函數,關于線程安全的知識點,看閱讀往期文章:如何理解線程安全?。
對于實時性要求較高的系統,多個線程同時調用localtime,可能會造成數據被覆蓋。我們項目中之前是用localtime來獲取系統時間、日期。并使用這個數據去做邏輯,數據異常導致了邏輯異常。
后面使用localtime_r來替代,問題解決。
例子:
#include
#include
time_t
get_utc_time(void){
return
time(NULL);}int
main(int
argc,
char
**argv){
time_t
utc_time
=
get_utc_time();
printf("utc_time
=
%ld
s",
utc_time);
struct
tm
result;
struct
tm
*local_tm
=
localtime_r(
printf("local
time
=
%.4d-%.2d-%.2d
%.2d:%.2d:%.2d",
local_tm->tm_year
+
1900,
local_tm->tm_mon
+
1,
local_tm->tm_mday,
local_tm->tm_hour,
local_tm->tm_min,
local_tm->tm_sec);
printf("result
time
=
%.4d-%.2d-%.2d
%.2d:%.2d:%.2d",
result.tm_year
+
1900,
result.tm_mon
+
1,
result.tm_mday,
result.tm_hour,
result.tm_min,
result.tm_sec);
return
0;}
編譯、運行:
6、gmtime
#include
/**
*
@brief
返回tm結構的GMT時間(UTC時間)
*
*
Detailed
function
description
*
*
@param[in]
timep:
當前UTC秒數
*
*
@return
返回當地時間
*/struct
tm
*gmtime(const
time_t
*timep);
例子:
#include
#include
time_t
get_utc_time(void){
return
time(NULL);}int
main(int
argc,
char
**argv){
time_t
utc_time
=
get_utc_time();
printf("utc_time
=
%ld
s",
utc_time);
struct
tm
*gmt_tm
=
gmtime(
printf("gmt
time
=
%.4d-%.2d-%.2d
%.2d:%.2d:%.2d",
gmt_tm->tm_year
+
1900,
gmt_tm->tm_mon
+
1,
gmt_tm->tm_mday,
gmt_tm->tm_hour,
gmt_tm->tm_min,
gmt_tm->tm_sec);
return
0;}
編譯、運行:
localtime和gmtime的區別?
localtime和gmtime都是(C語言)中的函數,用于將time_t類型的時間轉換為structtm類型的時間。它們的區別在于,gmtime將time_t轉換為UTC時間,即世界標準時間,而localtime將time_t轉換為本地時間。
例子:使用gmtime與localtime接口返回的小時數來計算當地時區
#include
#include
time_t
get_utc_time(void){
return
time(NULL);}int
main(int
argc,
char
**argv){
time_t
utc_time
=
get_utc_time();
printf("utc_time
=
%ld
s",
utc_time);
struct
tm
*gmt_tm
=
gmtime(
printf("gmt
time
=
%.4d-%.2d-%.2d
%.2d:%.2d:%.2d",
gmt_tm->tm_year
+
1900,
gmt_tm->tm_mon
+
1,
gmt_tm->tm_mday,
gmt_tm->tm_hour,
gmt_tm->tm_min,
gmt_tm->tm_sec);
int
gmt_hou
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 老年教育需求增長與老年教育師資培訓體系研究報告
- 物質變化與能量轉移關系試題及答案
- 環保設備制造業市場多元化競爭與創新策略分析報告
- 教育教學反思的功能與策略試題及答案
- 新能源汽車電池安全與可靠性研究試題及答案
- 文化創意產業園區建筑2025年初步設計可行性評估報告
- 潮安教師面試題及答案
- 深圳進廠面試題及答案
- 社交電商裂變營銷在食品行業中的創新技術應用報告
- 西藏職業技術學院《漫畫設計》2023-2024學年第二學期期末試卷
- 廣東省廣州市2025年中考地理模擬測試卷(含答案)
- 2023年江蘇省環保集團有限公司長期招聘筆試參考題庫附帶答案詳解
- GB/T 45369-2025吸收性衛生用紙制品及原材料消臭效果評價方法
- 第一章+動量守恒定律+章末復習高二上學期物理人教版(2019)選擇性必修第一冊
- 信創產業面試題及答案
- 水利水電工程質量保證體系
- 《思想道德與法治》(23版):第五章 遵守道德規范 錘煉道德品格
- 小學教育學(第5版)課件 第5章 小學教育目標
- 警衛安檢任務流程
- 展覽會議展前展中展后服務方案(技術方案)
- 生物分離工程模考試題含參考答案
評論
0/150
提交評論