Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. General and Desktop
  4. Losing seconds precision when displaying datetime with postgresql

Losing seconds precision when displaying datetime with postgresql

Scheduled Pinned Locked Moved Solved General and Desktop
3 Posts 2 Posters 377 Views
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • I Offline
    I Offline
    ivanicy
    wrote on 28 Feb 2022, 11:27 last edited by
    #1

    Hello!

    I have a database with postgresql. I have a table that contains a timestamp column. When I do a query with pgAdmin, it shows the datetime correctly:

    ba91427e-1a13-48cf-9f3e-fe97bd8eca47-image.png

    But, when I show the result in a QTableView in Qt, I lose the seconds:

    7741cb9e-e167-4ead-a274-38143358c916-image.png

    This is my code:

    QString sROIsQuery = QString("roiID LIKE '\%%1\%'").arg(m_slDataROIs.at(0));
        if (m_slDataROIs.size() > 1) {
            for (int i = 1; i < m_slDataROIs.size(); i++)
                sROIsQuery.append(QString("OR roiID LIKE '\%%1\%'").arg(m_slDataROIs.at(i)));
        }
    
        QString sDataQuery = QString("dataCode='%1'").arg(m_slData.at(0));
        if (m_slData.size() > 1) {
            for (int i = 1; i < m_slData.size(); i++)
                sDataQuery.append(QString("OR dataCode='%1'").arg(m_slData.at(i)));
        }
    
        QString sCamerasQuery = QString("cameraID='%1'").arg(m_slDataCameras.at(0).split(" ")[1]);
        if (m_slDataCameras.size() > 1) {
            for (int i = 1; i< m_slAlarmsCameras.size(); i++)
                sCamerasQuery.append(QString("OR cameraID='%1'").arg(m_slDataCameras.at(i).split(" ")[1]));
        }
    
        QString sPresetsQuery = QString("presetID='%1'").arg(m_slDataPresets.at(0).split(" ").last());
        if (m_slDataPresets.size() > 1) {
            for (int i = 1; i < m_slDataPresets.size(); i++)
                sPresetsQuery.append(QString("OR presetID='%1'").arg(m_slDataPresets.at(i).split(" ").last()));
        }
    
        QString sDateFromQuery = QString("dataDateTime>='%1'").arg(dtDataFrom.toString("yyyy-MM-dd hh:mm:ss"));
        QString sDateToQuery = QString(" AND dataDateTime<='%1'").arg(dtDataTo.toString("yyyy-MM-dd hh:mm:ss"));
        QString sDateQuery = sDateFromQuery + sDateToQuery;
    
        QString sQuery = QString("SELECT dataCode, cameraSN, cameraID, presetID, roiID, dataDateTime, description, data FROM Data "
            "WHERE (%1) AND (%2) AND (%3) AND (%4) AND (%5) ORDER BY dataDateTime DESC;").arg(sROIsQuery).arg(sDataQuery).arg(sCamerasQuery).arg(sPresetsQuery).arg(sDateQuery);
    
    m_pDataQueryModel->setQuery(*query);
    
        ui->tableData->setModel(m_pDataQueryModel);
    //    ui->tableData->horizontalHeader()->setStretchLastSection(true);
        ui->tableData->horizontalHeader()->setSectionResizeMode(0, QHeaderView::Stretch);
        ui->tableData->horizontalHeader()->setSectionResizeMode(1, QHeaderView::Stretch);
        ui->tableData->horizontalHeader()->setSectionResizeMode(2, QHeaderView::Stretch);
        ui->tableData->horizontalHeader()->setSectionResizeMode(3, QHeaderView::Stretch);
        ui->tableData->horizontalHeader()->setSectionResizeMode(4, QHeaderView::Stretch);
        ui->tableData->horizontalHeader()->setSectionResizeMode(5, QHeaderView::Stretch);
        ui->tableData->horizontalHeader()->setSectionResizeMode(6, QHeaderView::Stretch);
        ui->tableData->horizontalHeader()->setSectionResizeMode(7, QHeaderView::Stretch);
    
    

    What could be happening?

    Thank you very much!

    1 Reply Last reply
    0
    • M Offline
      M Offline
      mchinand
      wrote on 28 Feb 2022, 14:50 last edited by mchinand
      #2

      Create a custom QStyledItemDelegate and reimplement the displayText() method. Check the QVariant::type() of the value parameter and if it's of type QDateTime, do your custom formatting otherwise, call the default implementation of the displayText(). I haven't tested this code but it will be something like this:

      QString CustomDateTimeDelegate::displayText(const QVariant &value, const QLocale &locale){
          if (value.type() == QMetaType::QDateTime){
                 return value.toDateTime().toString("yyyy-MM-dd hh:mm:ss");
          } else{
                 return QStyledItemDelegate::displayText(value, locale);
         }
      }
      I 1 Reply Last reply 1 Mar 2022, 08:45
      7
      • M mchinand
        28 Feb 2022, 14:50

        Create a custom QStyledItemDelegate and reimplement the displayText() method. Check the QVariant::type() of the value parameter and if it's of type QDateTime, do your custom formatting otherwise, call the default implementation of the displayText(). I haven't tested this code but it will be something like this:

        QString CustomDateTimeDelegate::displayText(const QVariant &value, const QLocale &locale){
            if (value.type() == QMetaType::QDateTime){
                   return value.toDateTime().toString("yyyy-MM-dd hh:mm:ss");
            } else{
                   return QStyledItemDelegate::displayText(value, locale);
           }
        }
        I Offline
        I Offline
        ivanicy
        wrote on 1 Mar 2022, 08:45 last edited by
        #3

        @mchinand Thank you very much!!

        1 Reply Last reply
        0

        1/3

        28 Feb 2022, 11:27

        • Login

        • Login or register to search.
        1 out of 3
        • First post
          1/3
          Last post
        0
        • Categories
        • Recent
        • Tags
        • Popular
        • Users
        • Groups
        • Search
        • Get Qt Extensions
        • Unsolved