21xrx.com
2024-12-22 21:05:25 Sunday
登录
文章检索 我的文章 写文章
C++实现日期转时间戳
2023-07-11 12:35:25 深夜i     --     --
C++ 日期 时间戳 转换

日期和时间戳是常见的时间表示形式,日期是一种易于人们理解和使用的时间表示形式,而时间戳则是计算机更容易操作和处理的时间表示形式。在实际的编程中,有时候需要将日期转换成时间戳,那么怎样使用C++来实现日期转时间戳呢?

在C++中,可以使用time.h头文件中的函数来获取当前时间戳,并且可以使用C++中的string和chrono库来实现日期到时间戳的转换。以下是具体的实现步骤:

1. 首先,我们需要获取当前时间戳。可以使用time.h头文件中的time()函数来获取当前的系统时间戳。该函数返回值是time_t类型,表示从计算机元年(1970年1月1日00: 00: 00)到当前时间的秒数。示例代码如下:


time_t now = time(nullptr);

2. 接下来,我们需要将日期转换成tm结构体。可以使用C++中的string类型将日期转换为字符串类型,再使用sscanf()函数将字符串转换成结构体tm。tm结构体中包含了日期和时间的详细信息,如年、月、日、时、分、秒等。示例代码如下:


std::string str = "2022-01-01 12:00:00";

std::tm tm = {};

std::sscanf(str.c_str(), "%d-%d-%d %d:%d:%d", &tm.tm_year, &tm.tm_mon,

&tm.tm_mday, &tm.tm_hour, &tm.tm_min, &tm.tm_sec);

tm.tm_year -= 1900; // 由于tm结构体中的年份是以1900年为基准的,所以需要减去1900

tm.tm_mon -= 1; // 由于tm结构体中的月份是以0~11表示的,所以需要减1

3. 将tm结构体转换成time_t类型的时间戳。可以使用C++中的mktime()函数将tm结构体转换为time_t类型的时间戳。示例代码如下:


time_t time = std::mktime(&tm);

4. 至此,日期转时间戳的实现已经完成。完整的代码如下:


#include <ctime>

#include <chrono>

#include <string>

#include <cstdio>

int main()

{

  time_t now = time(nullptr); // 获取当前时间戳

  std::string str = "2022-01-01 12:00:00"; // 待转换日期

  std::tm tm = {};

  std::sscanf(str.c_str(), "%d-%d-%d %d:%d:%d", &tm.tm_year, &tm.tm_mon,

  &tm.tm_mday, &tm.tm_hour, &tm.tm_min, &tm.tm_sec);

  tm.tm_year -= 1900; // 由于tm结构体中的年份是以1900年为基准的,所以需要减去1900

  tm.tm_mon -= 1; // 由于tm结构体中的月份是以0~11表示的,所以需要减1

  time_t time = std::mktime(&tm); // 将tm结构体转换为时间戳

  std::chrono::system_clock::time_point p = std::chrono::system_clock::from_time_t(time);

  std::chrono::duration<int64_t, std::ratio<1, 1000>> milliseconds = std::chrono::duration_cast<std::chrono::milliseconds>(p.time_since_epoch());  // 换算成毫秒

  int64_t timestamp = milliseconds.count(); // 获取毫秒级时间戳

  std::printf("timestamp = %lld\n", timestamp);

  return 0;

}

总之,在C++中实现日期转时间戳的操作并不难,只需要使用time.h头文件和C++中的string和chrono库即可。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复