Qt 一些日期格式转换不精确

1、 Qt 时间戳转换不准确的问题

  • 时间格式为 "M/d/yy" "d/M/yy" "yy-M-d" "MM-dd-yy" "d-MMM-yy" "MMM.d,yy" "MMM-yy" 的字符串在调用 daysFromDateString() 进行时间的转换时,往往转换不精确的时间,例如 “21-7-21” 的年月日在调用 qt 的 Qdate::daysFromDateString() 进行时间戳的转换时,就会转换成 1921-01-01 等错误时间
  • 原因这是 qt 自身的识别与转换问题。
  • 欢迎扫码回复「排版」加入推文群

2、解决方法

  • 对输入的字符串转换成的时间戳进行判断与比较(与一个实世纪的中点50年为比较点),如果字符串的时间戳低于1950年1月1日的时间戳,字符串转换的时间戳就需要往前加上 100 年的时间戳进行矫正。具体代码实现:
  QDateTime divideDates = QDateTime(QDate(1950,01,01)); //1950.01.01的分界时间戳
  QDateTime datesCompare = QDateTime(QDate(1899,12,30));      //以 edStartDate 为起始点的时间戳
  qint64 dtCompare = datesCompare.secsTo(divideDates);  //1950.01.01转换成秒数的时间戳
  if(dt < dtCompare )                                   //dt 为输入的字符串转换成的时间戳
    dt += 3155760000.0;                                 //如果小于 1950 年的时间戳,则加上100年的秒数进行弥补
    days = dt / 86400.0;                                // 转换成天数
原文地址:https://www.cnblogs.com/wickhamchen/p/14903696.html