1. 时间处理问题概述
在C++开发中处理时间问题是非常常见的需求。时间在计算机中以时间戳或者日期时间的形式存在,同时还包括一些常用操作,例如计算时间差、时区转换、格式化输出等。因此,C++也提供了相关的库函数来方便我们处理这些需求。
2. C++中的时间处理函数
2.1 time函数
time函数是C/C++时间库中最基本的函数之一,用于获取当前系统时间。该函数的返回值是自1970年1月1日以来经过的秒数。其定义如下:
#include <ctime>
time_t time(time_t* timer);
其中参数timer是一个指向time_t类型的指针,用于存储时间戳。
该函数返回的是UTC的时间,需要将其转换为本地时间。
2.2 gmtime和localtime函数
gmtime函数用于将时间戳转换为格林尼治标准时间(GMT)结构,localtime函数用于将时间戳转换为本地时间结构。这两个函数的定义如下:
#include <ctime>
struct tm* gmtime(const time_t* timer);
struct tm* localtime(const time_t* timer);
在成功转换后,这两个函数会返回一个结构体指针,其中包含各种关于日期和时间的信息,例如年、月、日、小时、分钟、秒、星期、一年中的第几天等。
2.3 strftime函数
strftime函数用于将时间结构体格式化为指定的字符串格式。其定义如下:
#include <ctime>
size_t strftime(char *str, size_t maxsize, const char *format, const struct tm *timeptr);
其中,str参数用于存储格式化的字符串,maxsize参数指定了str的最大长度,format参数是一个格式字符串,它包含一些特定的占位符用于表示不同的时间信息(例如%d表示月份的日期,%H表示小时数,%M表示分钟数等),timeptr参数是待格式化的时间结构体指针。
3. 时间处理示例代码
3.1 获取当前系统时间
以下代码演示了如何使用time函数获取当前系统时间:
#include <iostream>
#include <ctime>
int main()
{
time_t t = time(nullptr); // 获取当前系统时间的时间戳
std::cout << "Current system time: " << t << std::endl;
return 0;
}
输出结果:
当前系统时间: 1573317616
3.2 时间戳转为本地时间结构体
以下代码演示了如何将时间戳转换为本地时间结构体:
#include <iostream>
#include <ctime>
int main()
{
// 获取当前系统时间的时间戳
time_t t = time(nullptr);
// 将时间戳转换为本地时间结构体
struct tm* now = localtime(&t);
// 返回值包含年月日、时分秒、星期几等信息
std::cout << "Local time: " << now->tm_year + 1900 << "/"
<< now->tm_mon + 1 << "/"
<< now->tm_mday << " "
<< now->tm_hour << ":"
<< now->tm_min << ":"
<< now->tm_sec << std::endl;
return 0;
}
输出结果:
本地时间: 2019/11/10 12:21:56
3.3 格式化输出时间信息
以下代码演示了如何使用strftime函数将时间格式化输出为特定的字符串:
#include <iostream>
#include <ctime>
int main()
{
// 获取当前系统时间的时间戳
time_t t = time(nullptr);
// 将时间戳转换为本地时间结构体
struct tm* now = localtime(&t);
// 将时间格式化为指定的字符串
char buf[80];
strftime(buf, sizeof(buf), "Now it's %Y/%m/%d %H:%M:%S", now);
std::cout << buf << std::endl;
return 0;
}
输出结果:
Now it's 2019/11/10 12:32:40
总结
在C++开发中处理时间的需求十分普遍,本文介绍了C++时间库中的三个基本函数:time、gmtime和localtime、strftime函数,这些函数提供了获取当前系统时间、将时间戳转换为本地时间结构体、将时间格式化输出等功能。学会使用这些函数将有助于提高C++程序的时间处理效率。