postgresql - postgresql 时间戳到 std::chrono 值
问题描述
使用c ++(libpqxx)的postgresql数据类型“没有时区的时间戳”的适当方法是什么?我还没有找到一种方法来做到这一点。我仅限于 postgresql 中的“没有时区的时间戳”数据类型,并且环境正在运行 utc 时间。我希望找到到 std::chrono::system_clock::time_point 成员的映射,但我在 libpqxx 中找不到这样的。
//s 有一个 time_point 变量,r 是一个 pqxx::result,r[0] 是合理的
s.creationtime = r[0]["creationtime"].as<std::chrono::system_clock::time_point>();
解决方案
chrono::time_point
C++20 规范引入了一个叫做 s的家族local_time
:
// [time.clock.local], local time
struct local_t {};
template<class Duration>
using local_time = time_point<local_t, Duration>;
using local_seconds = local_time<seconds>;
using local_days = local_time<days>;
这些time_point
s 代表“没有时区的时间戳”。
这里有这个 C++20 库的免费开源预览:
https://github.com/HowardHinnant/date
目前正在全球其他项目中使用。该库与 C++20 规范相比有一些小的更改,例如将所有内容都放入namespace date
而不是namespace std::chrono
.
使用此库的示例程序:
#include "date/date.h"
#include <iostream>
int
main()
{
using namespace date;
using namespace std::chrono;
int y = 2019;
int m = 8;
int d = 28;
int H = 14;
int M = 42;
int S = 16;
int US = 500'000;
local_time<microseconds> lt = local_days{year{y}/m/d} + hours{H} +
minutes{M} + seconds{S} + microseconds{US};
std::cout << lt << '\n';
}
输出:
2019-08-28 14:42:16.500000
推荐阅读
- python - Numpy/Keras:ValueError:无法将输入数组从形状(7,5)广播到形状(7)
- android - 我可以在不同页面的项目中使用 FB 和 Admob 广告吗
- c# - ArgumentNullException:值不能为空。参数名称:Include 语句上的键
- mongodb - MongoDB 根据条件按计数分组
- javascript - Chrome 调试器显示错误的值
- bash - 如何在隐藏命令的同时读取命令输出?
- vue.js - VueJs - $route 在页面加载时不可用
- java - 制作一个循环,在遇到冒号字符之前返回字符
- node.js - 单击后禁用按钮
- python - 使用 python 从 Bash 脚本输出创建 Excel 文件