sys/time.h詳解

一、介紹

sys/time.h是C/C++語言中的一個標準頭文件,包含了與時間相關的函數和數據類型聲明。該頭文件提供了處理時間的函數和結構體,允許程序在不依賴於機器的底層特性的情況下,處理時間的相關屬性,如秒數、微秒數等。

二、數據類型

sys/time.h頭文件中包含了兩個重要的數據類型:timeval和timezone。

#include <sys/time.h>

struct timeval {
    time_t tv_sec;     // 秒數
    suseconds_t tv_usec;    // 微秒數
};

struct timezone {
    int tz_minuteswest;     // 距離格林威治的時區差值(分鐘數)
    int tz_dsttime;         // 夏令時標誌位
};

三、函數

sys/time.h中包含了一些常用的處理時間的函數:

1. gettimeofday函數

gettimeofday函數獲取當前時間,精度為微秒。

#include <sys/time.h>

int gettimeofday(struct timeval *tv, struct timezone *tz);

該函數接收兩個參數:指向timeval類型結構體的指針tv和指向timezone類型結構體的指針tz。如果只需要獲取當前時間,通常將第二個參數tz設置為NULL即可。

該函數返回0表示成功,返回-1表示失敗。

2. settimeofday函數

settimeofday函數設置系統時間。

#include <sys/time.h>

int settimeofday(const struct timeval *tv, const struct timezone *tz);

該函數接收兩個參數:指向timeval類型結構體的指針tv和指向timezone類型結構體的指針tz。

該函數返回0表示成功,返回-1表示失敗。

3. time函數

time函數獲取當前的時間戳,即從1970年1月1日0時0分0秒開啟的秒數(UTC時區)。

#include <time.h>

time_t time(time_t *t);

該函數接收一個參數:指向time_t類型結構體的指針t,該參數可傳NULL。如果不傳參,則time函數直接返回當前時間戳;如果傳參,則將當前時間戳賦值給t,並返回t的值。

該函數返回當前的時間戳。

4. localtime函數

localtime函數將一個時間戳轉化為一個當地時間結構體。

#include <time.h>

struct tm *localtime(const time_t *timep);

該函數接收一個參數:指向time_t類型結構體的指針timep。該參數表示時區為UTC的時間戳。

該函數返回一個指向tm類型結構體的指針,該結構體包含了轉化後的時間信息,包括年、月、日、時、分、秒等。

5. mktime函數

mktime函數將一個當地時間結構體轉化為時間戳。

#include <time.h>

time_t mktime(struct tm *tm);

該函數接收一個指向tm類型結構體的指針tm,其中包含了轉化前的當地時間。

該函數返回一個時區為UTC的時間戳。

四、示例代碼

下面是一個簡單的使用sys/time.h頭文件和其中函數的示例代碼:

#include <stdio.h>
#include <sys/time.h>

int main() {
    struct timeval t;
    gettimeofday(&t, NULL);
    printf("當前時間是:%d 秒 %d 微秒\n", t.tv_sec, t.tv_usec);

    time_t cur_time;
    cur_time = time(NULL);
    printf("當前時間戳是:%ld\n", cur_time);

    struct tm *local_time;
    local_time = localtime(&cur_time);
    printf("當前時間是:%d-%d-%d %d:%d:%d\n", local_time->tm_year + 1900, local_time->tm_mon + 1, local_time->tm_mday, local_time->tm_hour, local_time->tm_min, local_time->tm_sec);

    struct tm tm;
    tm.tm_year = 2020 - 1900;
    tm.tm_mon = 6 - 1;
    tm.tm_mday = 2;
    tm.tm_hour = 12;
    tm.tm_min = 0;
    tm.tm_sec = 0;
    time_t t2 = mktime(&tm);
    printf("2020年6月2日中午12點的時間戳是:%ld\n", t2);

    return 0;
}

原創文章,作者:KDNQH,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/372568.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
KDNQH的頭像KDNQH
上一篇 2025-04-24 06:40
下一篇 2025-04-24 06:40

相關推薦

  • Python datetime和time模塊用法介紹

    本文將詳細闡述Python datetime和time模塊的用法和應用場景,以幫助讀者更好地理解和運用這兩個模塊。 一、datetime模塊 datetime模塊提供了處理日期和時…

    編程 2025-04-28
  • Python中import sys的作用

    Python是一種非常強大的編程語言,它的標準庫提供了許多有用的模塊和函數。sys模塊是Python標準庫中的一個重要模塊,用於與Python解釋器和操作系統進行交互。它允許開發者…

    編程 2025-04-28
  • Linux sync詳解

    一、sync概述 sync是Linux中一個非常重要的命令,它可以將文件系統緩存中的內容,強制寫入磁碟中。在執行sync之前,所有的文件系統更新將不會立即寫入磁碟,而是先緩存在內存…

    編程 2025-04-25
  • 神經網路代碼詳解

    神經網路作為一種人工智慧技術,被廣泛應用於語音識別、圖像識別、自然語言處理等領域。而神經網路的模型編寫,離不開代碼。本文將從多個方面詳細闡述神經網路模型編寫的代碼技術。 一、神經網…

    編程 2025-04-25
  • Linux修改文件名命令詳解

    在Linux系統中,修改文件名是一個很常見的操作。Linux提供了多種方式來修改文件名,這篇文章將介紹Linux修改文件名的詳細操作。 一、mv命令 mv命令是Linux下的常用命…

    編程 2025-04-25
  • Python輸入輸出詳解

    一、文件讀寫 Python中文件的讀寫操作是必不可少的基本技能之一。讀寫文件分別使用open()函數中的’r’和’w’參數,讀取文件…

    編程 2025-04-25
  • nginx與apache應用開發詳解

    一、概述 nginx和apache都是常見的web伺服器。nginx是一個高性能的反向代理web伺服器,將負載均衡和緩存集成在了一起,可以動靜分離。apache是一個可擴展的web…

    編程 2025-04-25
  • 詳解eclipse設置

    一、安裝與基礎設置 1、下載eclipse並進行安裝。 2、打開eclipse,選擇對應的工作空間路徑。 File -> Switch Workspace -> [選擇…

    編程 2025-04-25
  • MPU6050工作原理詳解

    一、什麼是MPU6050 MPU6050是一種六軸慣性感測器,能夠同時測量加速度和角速度。它由三個感測器組成:一個三軸加速度計和一個三軸陀螺儀。這個組合提供了非常精細的姿態解算,其…

    編程 2025-04-25
  • Python安裝OS庫詳解

    一、OS簡介 OS庫是Python標準庫的一部分,它提供了跨平台的操作系統功能,使得Python可以進行文件操作、進程管理、環境變數讀取等系統級操作。 OS庫中包含了大量的文件和目…

    編程 2025-04-25

發表回復

登錄後才能評論