QDateTime::fromString() returns invalid



  • Hello again,

    today a small problem with QDateTime, I'm pretty sure it's something minor and I'm just too stupid to see it again, but before I rack my head over this for several hours I might just ask somebody a little more knowledgable than myself. Here's what I have:

    @eventTime = QDateTime::fromString( qsl.at(0), "yyyy-MM-dd h:mm:ss AP" );@

    eventTime is a QDateTime object, qsl is a QStringList and at(0) might return something like
    2014-03-11 4:35:38 PM. The format is always the same, but the values change, of course.

    The values from the debugger are correct (qsl.at(0) is indeed of the aforementioned format), but the conversion fails.

    I knocked together a little app doing just that, letting me feed it with a date, a matching format in another line and a third line showing me the date in a predefined format. Using the same values as above, everything works fine.

    Help is much appreciated!


  • Lifetime Qt Champion

    Hi,

    Can you elaborate on what fails ?

    What input makes it fail ?



  • I replaced the qsl.at(0) call with a concrete date to make sure it's not because of that. Here's the line now:

    @eventTime = QDateTime::fromString( "2014-03-11 4:35:38 PM", "yyyy-MM-dd h:mm:ss AP" );@

    In debugger I get "(invalid)" as value of eventTime. I use the gdb debugger, btw.


  • Lifetime Qt Champion

    What if you print the value of eventTime ?



  • What good would that do? I already know the value. Given that the debugger is bug-free. Anything curious about the format I used? Seems ok to me...


  • Moderators

    Your format looks fine visually, but I'm not able to test it in code at the moment.

    [quote author="chatumao" date="1395615052"]What good would that do?[/quote]It might reveal some clues to what went wrong.



  • If the the value in the debugger is "(invalid)", what do you think will be printed?

    Ok, I did it anyways. To my surprise, the value printed seems to be in order?!
    Can someone explain? I used the debuger before to check on QDateTime objects and there has never been a problem with the values.


  • Moderators

    I tried your code, and it works on both Qt 4.8.5 and Qt 5.2.1. Your format string is correct.

    [quote author="chatumao" date="1395639145"]If the the value in the debugger is "(invalid)", what do you think will be printed?[/quote]There are multiple possibilities. That's why printing it is helpful.

    [quote]Ok, I did it anyways. To my surprise, the value printed seems to be in order?!
    Can someone explain? I used the debuger before to check on QDateTime objects and there has never been a problem with the values.[/quote]I'm not sure, I haven't seen something like this before myself. But I daresay Qt can understand its own data quite well; what does eventTime.isValid() return?

    P.S. Debuggers are not guaranteed to be bug-free: http://www.gnu.org/software/gdb/bugs/



  • Ok. eventTime.isValid() returns 1. I guess that's something.

    I tried it with the Microsoft debugger cdb.exe.

    @eventTime = QDateTime::fromString( "2014-03-11 3:00:38 PM", "yyyy-MM-dd h:mm:ss AP" );@

    gives me unix time 0 in the debug information (01.01.1970, 00:00:00).

    Printing out the date is working fine.

    I am aware of bugs in debuggers, from what I gather there is no bug-free software as soon as there are enough lines of code involved. I just couldn't believe that I would actually encounter one in gdb myself, that's all.

    I doubt that it is a bug in the debugger, though. cdb is also showing odd behavior, so I guess it's a Qt thing. Maybe I should report this somewhere?

    Thanks for the time both of you.


  • Moderators

    Feel free to open a bug report at https://bugreports.qt-project.org

    If you do, you might post the ID of the report here so anyone interested could follow it.



  • Alright, I will give this a try. Would be nice to know if you guys experience the same issues, though. Might save some peoples time.


Log in to reply
 

Looks like your connection to Qt Forum was lost, please wait while we try to reconnect.