gpt4 book ai didi

C++ Boost 将 UNIX 时间戳转换为 MySQL 兼容的 DATETIME 字符串

转载 作者:行者123 更新时间:2023-11-28 05:49:43 24 4
gpt4 key购买 nike

我正在尝试将一个很长的 UNIX 时间戳转换为需要存储在 MySQL 中的日期时间字符串,格式为 2016-02-01 03:15:10

这就是我目前所拥有的。它不适用于时间提取部分。我找不到任何可以直接接受 boost::posix_time::ptime 对象的 boost::posix_time::time_duration 构造函数。所以我试图包括一个解决方法。但它在 hours() 部分不起作用。

static inline std::string getDateTime(long timestamp) {
std::stringstream date_str;
boost::posix_time::ptime pt_1 = boost::posix_time::from_time_t(timestamp);

/* workaround to somehow get a time_duration object constructed */
boost::posix_time::ptime pt_temp = boost::posix_time::from_time_t(0);

boost::gregorian::date d = pt_1.date();

boost::posix_time::time_duration td = pt_1 - pt_temp;

/* construct the Date Time string */
date_str << d.year() << "-" << std::setw(2) << std::setfill('0') << d.month().as_number() << "-" << std::setw(2) << std::setfill('0') << d.day() << " "
<< td.hours() << ":" << td.minutes() << ":" << td.seconds();

return date_str.str();
}

使用诸如 1455892259 之类的时间戳输入,我从函数中获取此 2016-02-19 404414:30:59 作为日期时间字符串。如何实际获取正确的日期时间字符串,在本例中为 2016-02-19 14:30:59。为此使用 Boost 是强制性的。

更新

这是使用下面 Jarra McIntyre 提供的答案重写的最终工作函数。

static inline std::string getDateTime(long timestamp) {
std::stringstream date_str;
boost::posix_time::ptime pt_1 = boost::posix_time::from_time_t(timestamp);

boost::gregorian::date d = pt_1.date();

auto td = pt_1.time_of_day();

/* construct the Date Time string */
date_str << d.year() << "-" << std::setw(2) << std::setfill('0') << d.month().as_number() << "-" << std::setw(2) << std::setfill('0') << d.day() << " "
<< td.hours() << ":" << td.minutes() << ":" << td.seconds();

return date_str.str();
}

最佳答案

使用

auto td = pt_1.time_of_day();

不需要变通方法来获取一天中的时间。您的问题中显示的小时数可能是 1970-01-01 00:00 和 2016-02-19 14:00 之间的小时数。对于使 time_duration 起作用的方法,您必须在同一天而不是 unix 时间 0 构造一个 ptime。

关于C++ Boost 将 UNIX 时间戳转换为 MySQL 兼容的 DATETIME 字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35520085/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com