将包含 PostgreSQL 时间戳的 QString 转换为 QDateTime

Posted

技术标签:

【中文标题】将包含 PostgreSQL 时间戳的 QString 转换为 QDateTime【英文标题】:Converting QString containing PostgreSQL timestamp to QDateTime 【发布时间】:2010-12-01 22:39:11 【问题描述】:

我遇到了一个看似非常简单的问题:我想从包含时间戳的 QString 中获取 QDateTime。我从 PostgreSQL 得到了时间戳,但这没关系。这是不起作用的代码:

QString timestamp = "2010-10-09 19:21:46+02:00";
QString format = "YYYY-MM-DD HH:MM:SSTZD";
QDateTime dt = QDateTime::fromString(timestamp, format);
qDebug() << dt.toString(); // outputs empty string

一定有一些非常明显的东西我错过了。谢谢!

【问题讨论】:

从哪里找到fromString中的“TZD”格式信息,不存在。实际上并没有说 QDateTime 可以解析您的时间字符串的 +2:00 部分 "YYYY" 必须是 "yyyy", "DD" -> "dd", "MM:SS" -> "mm:ss"。 我从here 获得了TZD 信息,但我显然误读了它,因为格式字符在QDateTime::fromString() 文档中指定。你的两个 cmet 结合起来让我得到了答案,所以如果你在下面添加一个答案,我会接受它。 【参考方案1】:

我犯了两个错误。格式规范中没有 TZD,所以我删除了时区信息,因为我的应用程序中不需要它:

timeStamp.chop(6);

然后用下面的格式得到一个QDateTime。注意小写格式字符:

QDateTime createdAt = QDateTime::fromString(timeStamp, "yyyy-MM-dd HH:mm:ss");

感谢以上各位的帮助。

【讨论】:

以上是关于将包含 PostgreSQL 时间戳的 QString 转换为 QDateTime的主要内容,如果未能解决你的问题,请参考以下文章

PostgreSQL:为所有行创建具有唯一时间戳的表

在 PostgreSQL 中使用带时间戳的 BETWEEN

PostgreSQL 中基于时间戳的移动平均线

我应该使用复合主键来加速 PostgreSQL 中基于时间戳的选择吗?

如何将此 postgresql 滞后语句移植到 mysql?

在 postgresql 中发送数据集