PostgreSQL:使用libpq的Unix时间戳的SQL时间戳

时间:2010-01-11 07:15:05

标签: c++ c postgresql

我知道我可以使用以下方式将SQL时间戳转换为unix时间戳。

SELECT extract(epoch FROM now());

现在,我有一个存储过程函数,它将直接将表行返回给调用者。其中一个行字段是“timestamp”类型。

在我的应用程序中,我使用的是libpq。我希望使用libpq函数(或任何c / c ++函数)将“2010-01-11 13:10:55.283”转换为unix时间戳。当然,我可以创建另一个名为

的存储过程
SQLTimestamp2UnixTimestamp
SELECT extract(epoch FROM $1);

但我只想通过单个c / c ++函数调用完成此任务,而不涉及存储过程。

有什么建议吗?谢谢!

2 个答案:

答案 0 :(得分:3)

为什么不简单(未经测试):

/* PostgreSQL sent "date" */
strptime(date, "%Y-%m-%d %H:%M:%S", &result);

然后

strftime(epoch, MAX, "%s", result);
/* print epoch */

答案 1 :(得分:1)

boost::posix_time::ptime t(boost::posix_time::time_from_string(ts));
boost::posix_time::ptime start(boost::gregorian::date(1970,1,1)); 
boost::posix_time::time_duration dur = t - start; 
time_t epoch = dur.total_seconds();

long timestamp = static_cast<long>(epoch);