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. QDateTime::fromString() returns invalid Datetime
QtWS25 Last Chance

QDateTime::fromString() returns invalid Datetime

Scheduled Pinned Locked Moved Solved General and Desktop
23 Posts 6 Posters 3.7k 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.
  • C Christian M.

    This post is deleted!

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

    @Christian-M
    Firstly, I mistook you for the OP, I see now you were a responder. I was trying to answer/help the OP. I am not the one who is confused! I have been working with cross-timezone code for decades! What I am trying to discover is how to do something in Qt with this, which I have not done.

    My understanding of what the OP was asking is:

    • He is in Australia/Melbourne, that is his local tz.
    • He gets a datetime string to parse. It does not have a tz specification, e.g. something like "2017-03-26T02:14:34.000".
    • He does know it represents a local time, and he does know which timezone it is from, but it is not his local timezone. And he does not know whether the foreign time lies in foreign DST or Standard time, he just knows the time is "correct" for a foreign local time. This is important.
    • The question is what Qt code can he write to correctly parse that datetime from its "foreign" tz to a datetime in his local tz (or to UTC).

    I do not see how your

    QCalendar cal(QCalendar::System::Julian);
    QDateTime ts = QDateTime::fromString("02/10/2022 02:00:00", "dd/MM/yyyy hh:mm:ss", cal); //valid
    

    can possibly address this. The fact that you use Julian calendar does not alter the problem. Since nowhere have you told it that the string comes from a foreign local time, it has no idea what this "02:00" time actually was in UTC.

    Could you please show a worked example you claim which addresses this correctly? Let's say you are in Australia and you are given "02/10/2022 02:00:00" which you know to be in, say, UK time. But your code is not running in UK. Please show how you convert that to, say, UTC time in Qt. Thank you.

    C 1 Reply Last reply
    0
    • JonBJ JonB

      @Christian-M
      Firstly, I mistook you for the OP, I see now you were a responder. I was trying to answer/help the OP. I am not the one who is confused! I have been working with cross-timezone code for decades! What I am trying to discover is how to do something in Qt with this, which I have not done.

      My understanding of what the OP was asking is:

      • He is in Australia/Melbourne, that is his local tz.
      • He gets a datetime string to parse. It does not have a tz specification, e.g. something like "2017-03-26T02:14:34.000".
      • He does know it represents a local time, and he does know which timezone it is from, but it is not his local timezone. And he does not know whether the foreign time lies in foreign DST or Standard time, he just knows the time is "correct" for a foreign local time. This is important.
      • The question is what Qt code can he write to correctly parse that datetime from its "foreign" tz to a datetime in his local tz (or to UTC).

      I do not see how your

      QCalendar cal(QCalendar::System::Julian);
      QDateTime ts = QDateTime::fromString("02/10/2022 02:00:00", "dd/MM/yyyy hh:mm:ss", cal); //valid
      

      can possibly address this. The fact that you use Julian calendar does not alter the problem. Since nowhere have you told it that the string comes from a foreign local time, it has no idea what this "02:00" time actually was in UTC.

      Could you please show a worked example you claim which addresses this correctly? Let's say you are in Australia and you are given "02/10/2022 02:00:00" which you know to be in, say, UK time. But your code is not running in UK. Please show how you convert that to, say, UTC time in Qt. Thank you.

      C Offline
      C Offline
      Christian M.
      wrote on last edited by Christian M.
      #22
      This post is deleted!
      JonBJ 1 Reply Last reply
      0
      • C Christian M.

        This post is deleted!

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

        @Christian-M
        Hi, it has taken me a day to get back to you.

        Unfortunately I am on Qt 5.12 where there is no QCalendar, that was introduced at 5.14. So I cannot test your whole principle of a default Julian calendar and passing that to QDateTime::fromString(). So unless you know of an equivalent to your code for Qt <= 5.12 I cannot test anything.

        What I can say is that at 5.12

            QDateTime foreingTz = QDateTime::fromString(datetime_foreign_with_no_timezone_spec);
            foreingTz.setTimeZone(QTimeZone(QByteArray(foreign_timezone)));
        

        does seem to work, where my objective is to treat datetime_foreign_with_no_timezone_spec as a local time in foreign_timezone. What it does is:

        1. Initial fromString() treats datetime_foreign_with_no_timezone_spec as a local time in my local timezone.
        2. Calling setTimeZone(foreign_timezone) on that does seem to alter the interpretation of the original datetime string as a local time in the foreign timezone (which is what I am trying to achieve).
        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