将SQLite日期字段转换为C++Time_T
Convert SQLite Date Field to C++ Time_T
如何将以下格式的SQLite日期转换为C++Time_T变量?
YYYY-MM-DD HH:MM:SS
您可能希望阅读这个问题,它讨论了一些方法。特别是,如果您有权访问Boost,您可以使用<boost/date_time/posix_time/posix_time.hpp>
并根据问题中的格式字符串创建boost::posix_time::ptime
对象。(见该问题的第一个答案。)
或者,您可以使用strptime()
。
示例:
#include <ctime>
#include <iostream>
std::size_t timestamp_to_seconds(const char* timestamp)
{
std::tm tm_struct;
strptime(timestamp, "%Y-%m-%d %H:%M:%S", &tm_struct);
// You can control daylight savings time if necessary.
tm_struct.tm_isdst = 1;
std::size_t t = std::mktime(&tm_struct);
return t;
}
int main()
{
std::cout << timestamp_to_seconds("2013-07-05 12:34:56") << std::endl;
return 0;
}
运行此示例会得到以下输出:
$ ./a.out
1373042096
$ date -d "2013-07-05 12:34:56" +%s
1373042096
正如您所看到的,它与date
实用程序一致。(我假设你在一个可以访问strptime
的平台上。)在处理夏令时或时区信息时,你可能需要小心。。。我不得不使用tm_struct.tm_isdst = 1
强制承认夏令时,并与date
达成协议。
time_t
是Unix时间戳(自1970-01-01以来的秒数),因此您必须使用strftime:进行转换
SELECT strftime('%s', '2013-07-05 12:34:56');
结果是一个字符串,但您可以将其读取为整数值。
相关文章:
- 防止主数据类型C++的隐式转换
- 模板参数替换失败,并且未完成隐式转换
- 努力将整数转换为链表。不知道我在这里做错了什么
- HEX值到wchar_t字符(UTF-8)的转换
- lambda参数转换为constexpr技巧,然后获取带链接的数组
- 将 Qvector<uint8_t> 转换为 QString
- 如何在cuSparse中使用cusparseXcoo2csr从coo转换为csc
- 有关插入适配器的错误。[错误]请求从 'back_insert_iterator<vector<>>' 类型转换为非标量类型
- 在c++中使用nlohmann从类到json的转换
- 从"int*"强制转换为"unsigned int"会丢失精度错误
- 将Integer转换为4字节的unsined字符矢量(按大端字节顺序)
- 处理小于cpu数据总线的数据类型.(c++转换为机器代码)
- 如何使用OpenCV将RBG图像转换为HSV,并将H、S和V值保存为C++中的3个独立图像
- 复制列表初始化的隐式转换的等级是多少
- 正在将指针转换为范围
- 如何将 time-uuid(存储在 boost uuid 中)转换为时间戳/自纪元以来的时间?
- c/在Unix时间和"Gregorian time"之间转换
- 在 boost::p osix_time::p time 和 mongo::D ate_t 之间转换
- srand(time(null))导致编译器警告:隐式转换会丢失整数精度
- 使用自定义时区将 boost::p osix_time::p time 转换为字符串