c++ 获取当前时间戳并转换为字符串,精确到毫秒
时间: 2023-08-08 20:05:00 浏览: 313
在C++中获取当前时间戳可以使用`std::chrono::system_clock::now()`,它返回一个`std::chrono::time_point`类型的对象,表示当前时间点。而要将其转换为字符串,需要使用`std::put_time`函数将时间点转换为`std::tm`类型的结构体,再使用`std::strftime`函数将`std::tm`类型的结构体转换为字符串。具体实现如下:
```c++
#include <iostream>
#include <chrono>
#include <ctime>
#include <iomanip>
#include <cstring>
int main() {
auto now = std::chrono::system_clock::now();
auto now_ms = std::chrono::time_point_cast<std::chrono::milliseconds>(now);
auto value = now_ms.time_since_epoch().count();
std::time_t t = value / 1000;
std::size_t fractional_seconds = value % 1000;
std::tm* now_tm = std::localtime(&t);
char time_str[30];
std::strftime(time_str, sizeof(time_str), "%Y-%m-%d %H:%M:%S", now_tm);
std::sprintf(time_str + std::strlen(time_str), ".%03d", static_cast<int>(fractional_seconds));
std::cout << "当前时间为:" << time_str << std::endl;
return 0;
}
```
其中,`auto now = std::chrono::system_clock::now();`获取当前时间点,`auto now_ms = std::chrono::time_point_cast<std::chrono::milliseconds>(now);`将时间点精确到毫秒级别,`auto value = now_ms.time_since_epoch().count();`获取时间戳,单位为毫秒。
接下来,`std::time_t t = value / 1000;`将时间戳转换为`std::time_t`类型,`std::size_t fractional_seconds = value % 1000;`获得毫秒数。
然后,使用`std::localtime`函数将时间戳转换为本地时间,再使用`std::strftime`函数将时间转换为字符串。最后使用`std::sprintf`函数将毫秒数添加到字符串中,输出结果即可。
阅读全文