繁体   English   中英

将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年1月1日以来的秒数),因此您必须使用strftime进行转换:

SELECT strftime('%s', '2013-07-05 12:34:56');

结果是一个字符串,但是您可以将其读取为整数值。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM