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?
QtWS25 Last Chance

How to work with time intervals in Qt?

Scheduled Pinned Locked Moved Solved General and Desktop
15 Posts 7 Posters 3.8k 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.
  • R Offline
    R Offline
    r3d9u11
    wrote on last edited by
    #1

    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 1 Reply Last reply
    0
    • sierdzioS Offline
      sierdzioS Offline
      sierdzio
      Moderators
      wrote on last edited by
      #2

      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.

      (Z(:^

      R 1 Reply Last reply
      4
      • M Offline
        M Offline
        MrShawn
        wrote on last edited by
        #3

        A lot of times I will use QTimer singleshot and connect the timeout signal to a slot to do a task every x ms. If i need it to repeat I start my timer again at the end of the slot's execution.

        1 Reply Last reply
        0
        • SGaistS Offline
          SGaistS Offline
          SGaist
          Lifetime Qt Champion
          wrote on last edited by
          #4

          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.

          Interested in AI ? www.idiap.ch
          Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

          R 1 Reply Last reply
          3
          • EddyE Offline
            EddyE Offline
            Eddy
            wrote on last edited by Eddy
            #5

            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

            Qt Certified Specialist
            www.edalsolutions.be

            R 1 Reply Last reply
            0
            • 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 Online
                          Christian EhrlicherC Online
                          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 Online
                              Christian EhrlicherC Online
                              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