【C++】C++获取当前系统时间

程序员赵大宝 2024-08-17 10:05:12 阅读 67

目录

一.ctime

二.localtime

三.strftime


一.ctime

在C++中, ctime  是C标准库中的一个头文件,它提供了一组函数来处理日期和时间。虽然C++11引入了更现代的  <chrono>  库,但  ctime  仍然被广泛使用,特别是在与C代码兼容或需要简单日期和时间操作时。

以下是一些  ctime  头文件中定义的常用函数:

1.  time_t time(time_t* ptr) : 获取当前时间的时间戳(自1970年1月1日以来的秒数)。如果提供了  ptr  参数,函数会将当前时间戳存储在  ptr  指向的位置。

<code>#include <ctime>

int main() {

    time_t t = time(NULL);

    std::cout << "Current time: " << t << std::endl;

    return 0;

}

2.  double difftime(time_t time1, time_t time2) : 计算两个时间戳之间的差异,返回一个  double  类型的值,表示时间1比时间2多出的秒数。

3.  tm* localtime(const time_t* time) : 将时间戳转换为  tm  结构,该结构包含了日期和时间的各个组成部分。

#include <ctime>

int main() {

    time_t t = time(NULL);

    tm* localTime = localtime(&t);

    std::cout << "Local time: "

              << (localTime->tm_year + 1900) << "-"

              << (localTime->tm_mon + 1) << "-"

              << localTime->tm_mday << " "

              << localTime->tm_hour << ":"

              << localTime->tm_min << ":"

              << localTime->tm_sec << std::endl;

    return 0;

}

4.  tm* gmtime(const time_t* time) : 类似于  localtime ,但返回的是协调世界时(UTC)。

5.  size_t strftime(char* s, size_t max, const char* format, const tm* timeptr) : 根据给定的格式将  tm  结构转换为字符串。

#include <ctime>

int main() {

    time_t t = time(NULL);

    tm* localTime = localtime(&t);

    char buffer[100];

    strftime(buffer, sizeof(buffer), "%Y-%m-%d %H:%M:%S", localTime);

    std::cout << "Formatted time: " << buffer << std::endl;

    return 0;

}

6.  void tzset(void) : 设置时区环境变量,影响  localtime  和  strftime  函数的输出。

请注意, ctime  库中的函数通常依赖于操作系统的实现,并且  tm  结构的字段可能在不同的系统上有所不同。此外,由于  tm  结构中的  tm_year  字段是从1900年开始计数的,所以在打印年份时需要加上1900。

对于现代C++开发,推荐使用  <chrono>  库,因为它提供了类型安全和更丰富的功能。然而,如果你需要与C代码兼容或者处理一些简单的日期和时间问题, ctime  仍然是一个有用的选择。

二.localtime

在C++中, localtime  是一个标准库函数,用于将自UTC时间1970年1月1日午夜(即UNIX纪元时间0点)以来的秒数转换为本地时间的  tm  结构表示。这个函数定义在  <ctime>  头文件中。

函数的原型如下:

tm* localtime(const time_t *timer);

参数说明:

timer :指向  time_t  类型的指针, time_t  通常是一个长整型,表示从UNIX纪元时间以来的秒数。

 localtime  函数会将传入的秒数转换为本地时间,并返回一个  tm  结构的指针。这个结构体包含了分解的时间信息,例如年、月、日、小时、分钟和秒等。

tm  结构通常定义如下:

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-11

    int tm_year;   // 自1900年以来的年数

    int tm_wday;   // 一周中的第几天,0-6,0是星期天

    int tm_yday;   // 一年中的第几天,0-365

    int tm_isdst;  // 夏令时标志,非0表示夏令时

};

这里有一个使用  localtime  的简单例子:

#include <iostream>

#include <ctime>

int main() {

    time_t t = time(NULL); // 获取当前时间的秒数

    tm* timePtr = localtime(&t); // 转换为本地时间的tm结构

    if (timePtr != NULL) {

        std::cout << "Current local time: "

                  << (timePtr->tm_year + 1900) << "-"  // tm_year是从1900年开始计数的

                  << (timePtr->tm_mon + 1) << "-"      // tm_mon是从0开始计数的,所以要加1

                  << timePtr->tm_mday << " "

                  << timePtr->tm_hour << ":"

                  << timePtr->tm_min << ":"

                  << timePtr->tm_sec << std::endl;

    }

    return 0;

}

这段代码将获取当前的本地时间,并将其分解为年、月、日、小时、分钟和秒,然后打印出来。注意, tm_year  字段是从1900年开始计数的,而  tm_mon  字段是从0开始计数的,所以在打印时需要做相应的调整。

三.strftime

strftime  是一个C语言标准库函数,用于根据给定的格式将时间转换为字符串。在C++中, strftime  函数同样可用,并且是  <ctime>  头文件中定义的。

函数的原型如下:

size_t strftime(char *strDest, size_t maxsize, const char *format, const struct tm *timeptr);

参数说明:

 strDest :指向用于存放格式化时间字符串的缓冲区的指针。

 maxsize :缓冲区的大小,包括空字符。

 format :格式字符串,定义了时间字符串的格式。

 timeptr :指向  tm  结构的指针, tm  结构包含了分解的时间信息。

 strftime  函数会根据  format  指定的格式,将  timeptr  指向的时间信息格式化为字符串,并存储到  strDest  指向的缓冲区中。如果格式化后的字符串长度超过  maxsize ,函数将停止写入并返回0。

一些常用的格式说明符包括:

 %Y :四位数年份表示(例如:2024)

 %m :月份(01到12)

 %d :月份中的日(01到31)

 %H :小时(00到23)

 %M :分钟(00到59)

 %S :秒(00到59)

这里有一个简单的例子:

#include <iostream>

#include <ctime>

#include <cstring>

int main() {

    time_t t = time(NULL);

    tm* timePtr = localtime(&t);

    char buffer[100];

    strftime(buffer, 100, "%Y-%m-%d %H:%M:%S", timePtr);

    std::cout << "Current date and time: " << buffer << std::endl;

    return 0;

}

这段代码将获取当前的日期和时间,并使用  strftime  函数将其格式化为 "YYYY-MM-DD HH:MM:SS" 的形式。

 

 

 



声明

本文内容仅代表作者观点,或转载于其他网站,本站不以此文作为商业用途
如有涉及侵权,请联系本站进行删除
转载本站原创文章,请注明来源及作者。