You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Python通过QDataStream读取文件中的QDateTime?

如何用Python读取QDataStream存储的QDateTime数据?

PyQt/PySide的QDataStream确实没有提供直接的readQDateTime()方法,你需要按照QDateTime在QDataStream中的序列化格式手动解析数据。

QDateTime的序列化规则(以Qt 5+版本为例):

  • 首先读取一个qint32类型的状态码,标记QDateTime是否有效、是否包含时区等信息
  • 若状态码标记为有效,接着读取qint64类型的毫秒级UTC时间戳(从1970-01-01 00:00:00开始计算)
  • 若状态码包含时区标记,还需读取对应的时区ID字符串

以下是完整的示例代码:

from PyQt5.QtCore import QFile, QDataStream, QDateTime, Qt

infile = QFile(filepath)
if not infile.open(QFile.ReadOnly):
    # 处理文件打开失败的逻辑,比如打印错误信息
    print("无法打开文件")
stream = QDataStream(infile)
# 关键:设置和写入时一致的QDataStream版本,避免解析错误
# 示例:stream.setVersion(QDataStream.Qt_5_15)

header = stream.readQString()
version = stream.readInt()

# 读取QDateTime数据
status = stream.readInt32()
date = QDateTime()
if status & 0x01:  # 检查QDateTime是否有效
    msecs_since_epoch = stream.readInt64()
    date.setMSecsSinceEpoch(msecs_since_epoch)
    if status & 0x02:  # 检查是否包含时区信息
        tz_id = stream.readQString()
        date.setTimeZone(Qt.TimeZone(tz_id.encode('utf-8')))

注意事项:

  • 必须保证读取时的QDataStream版本与写入文件时的版本完全一致,否则会出现解析错误
  • 如果写入的QDateTime是无效状态(未初始化),状态码的最低位为0,此时无需读取后续的时间戳和时区数据
  • 若写入时未包含时区信息,可忽略时区解析部分,但要确保后续数据的读取位置正确

内容的提问来源于stack exchange,提问作者Juan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 15:40:32