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. How to work with time intervals in Qt?
Forum Updated to NodeBB v4.3 + New Features

How to work with time intervals in Qt?

Scheduled Pinned Locked Moved Solved General and Desktop
15 Posts 7 Posters 3.8k Views 3 Watching
  • 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.
  • R r3d9u11

    Re: Time Span Calculation

    Hello. Is there any class to work with time intervals in Qt ? Something like a TimeSpan in C#. I can't find any information about it, yet.

    JonBJ Offline
    JonBJ Offline
    JonB
    wrote on last edited by JonB
    #6

    @r3d9u11
    TimeSpan in C# has nothing to do with clocks/timers/timeouts/signals, it's just a data type for manipulating time periods, which happens to go down to milliseconds/ticks.

    If you are in C++, given @SGaist's link to std::chrono and its members like duration, it hardly seems worth worrying about/waiting for Qt to implement anything when you have that to use. If you're using Python, the language has library datetime.timedelta.

    R 1 Reply Last reply
    3
    • EddyE Eddy

      a long time ago @Andre was working on that.

      I found the thread here on the forum:
      https://forum.qt.io/topic/3160/qtimespan-interest

      hope it helps

      R Offline
      R Offline
      r3d9u11
      wrote on last edited by
      #7

      @eddy Thank you, I watched this topic, too (so, this topic is just a continuing of that discussion)

      1 Reply Last reply
      0
      • sierdzioS sierdzio

        There is no such class. But parts of the functionality you can get with QDateTime::daysTo() and similar.

        For smaller time spans, you can also check QTimer, QElapsedTimer, QDeadlineTimer.

        R Offline
        R Offline
        r3d9u11
        wrote on last edited by r3d9u11
        #8

        @sierdzio Thak you, however something wrong with QDateTime. It work incorrectly when date is zero.
        For example:

        #include <QCoreApplication>
        #include <QDateTime>
        #include <QDebug>
        
        void print_date(const QDateTime& qdt)
        {
            qDebug() << qdt.date().toString("yyyy:MM:dd") << "-" << qdt.time().toString("hh:mm:ss");
        }
        
        int main ()
        {
            QDateTime qdt(QDate(0, 0, 0), QTime(0, 0, 0));
            print_date(qdt);
        
            qdt = qdt.addSecs(5);
            print_date(qdt);
        
            qdt = qdt.addMSecs(3600003);
            print_date(qdt);
        
            return 0;
        }
        

        will output:

        "" - "00:00:00"
        "" - ""
        "" - ""
        Press <RETURN> to close this window...
        

        In that time, if we change date to (1,1,1) it will work fine:

        ...
        QDateTime qdt(QDate(0, 0, 0), QTime(0, 0, 0));
        ...
        

        result:

        "0001:01:01" - "00:00:00"
        "0001:01:01" - "00:00:05"
        "0001:01:01" - "01:00:05"
        Press <RETURN> to close this window...
        

        Maybe I don't understand something ?

        Tested with Qt 5.9.7 and Qt 5.12.4

        1 Reply Last reply
        0
        • JonBJ JonB

          @r3d9u11
          TimeSpan in C# has nothing to do with clocks/timers/timeouts/signals, it's just a data type for manipulating time periods, which happens to go down to milliseconds/ticks.

          If you are in C++, given @SGaist's link to std::chrono and its members like duration, it hardly seems worth worrying about/waiting for Qt to implement anything when you have that to use. If you're using Python, the language has library datetime.timedelta.

          R Offline
          R Offline
          r3d9u11
          wrote on last edited by r3d9u11
          #9

          @jonb Hi, thak you for your notes. I'm on C++ and I don't need any related to timers,timeouts,signals. I just need to manipulate time interval. For example add milliseconds and finally get time interval on hours/minutes, or substract some seconds and finally get resulted time interval.

          Well I implemented my own class QTimeSpan, it uses alot dividing opetions and remainder of the division but it is easy to use, implemented for the short time and does needed functions :D

          However, QDateTime can do all these functions, but I faced with some strange but (as I noted below).

          1 Reply Last reply
          1
          • SGaistS SGaist

            Hi,

            IIRC, there was at some point discussions about a class named QTimeSpan. You have to search for it.

            Or maybe std::chrono may have what you want.

            R Offline
            R Offline
            r3d9u11
            wrote on last edited by
            #10

            @sgaist thank you fot hint. I'll read about it, I am a supporter of "standard" functions and methods (and hate to do own vechicles)

            1 Reply Last reply
            0
            • R Offline
              R Offline
              r3d9u11
              wrote on last edited by r3d9u11
              #11

              Thank you all for answers and hints.

              Well, finally there is 3 ways to work with time intervals in Qt/C++:

              1. Qt-way: You can use QDateTime
              2. C++-way: You can use std::chrono
              3. Funny and ugly way: You can produce your own vehicle to implement functions what do you need

              I think this theme can be closed.

              1 Reply Last reply
              0
              • Christian EhrlicherC Offline
                Christian EhrlicherC Offline
                Christian Ehrlicher
                Lifetime Qt Champion
                wrote on last edited by
                #12

                @r3d9u11 said in How to work with time intervals in Qt?:

                but I was facing with some strange behavior or bugs

                You simply didn't read the documentation: https://doc.qt.io/qt-5/qdate.html#QDate-2 : "Year 0 is invalid."

                Qt Online Installer direct download: https://download.qt.io/official_releases/online_installers/
                Visit the Qt Academy at https://academy.qt.io/catalog

                R 1 Reply Last reply
                2
                • Christian EhrlicherC Christian Ehrlicher

                  @r3d9u11 said in How to work with time intervals in Qt?:

                  but I was facing with some strange behavior or bugs

                  You simply didn't read the documentation: https://doc.qt.io/qt-5/qdate.html#QDate-2 : "Year 0 is invalid."

                  R Offline
                  R Offline
                  r3d9u11
                  wrote on last edited by r3d9u11
                  #13

                  @christian-ehrlicher you're right, I didn't do it completely (because mostly I read about QDateTime).
                  It seems like stick in the wheel. I hope there is some really important reasons to exclude zero from valid values.

                  In that case there is only two ways: clean C++ and own vehicle.

                  1 Reply Last reply
                  0
                  • Christian EhrlicherC Offline
                    Christian EhrlicherC Offline
                    Christian Ehrlicher
                    Lifetime Qt Champion
                    wrote on last edited by
                    #14

                    @r3d9u11 said in How to work with time intervals in Qt?:

                    I hope there is some really important reasons to exclude zero from valid values.

                    Yes, read the documentation (as I said before): https://doc.qt.io/qt-5/qdate.html#remarks

                    Qt Online Installer direct download: https://download.qt.io/official_releases/online_installers/
                    Visit the Qt Academy at https://academy.qt.io/catalog

                    R 1 Reply Last reply
                    2
                    • Christian EhrlicherC Christian Ehrlicher

                      @r3d9u11 said in How to work with time intervals in Qt?:

                      I hope there is some really important reasons to exclude zero from valid values.

                      Yes, read the documentation (as I said before): https://doc.qt.io/qt-5/qdate.html#remarks

                      R Offline
                      R Offline
                      r3d9u11
                      wrote on last edited by r3d9u11
                      #15

                      @christian-ehrlicher Yeah, I read it after was commenting, my bad :D
                      Thanks, again.

                      Finally I did that task with QDateTime and have got results like (example here):

                      "02:30:01.205"
                      Press <RETURN> to close this window...
                      

                      or

                      "146:30:01.205"
                      Press <RETURN> to close this window...
                      
                      1 Reply Last reply
                      0

                      • Login

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