Results 1 to 8 of 8

Thread: Problem with pointers while using localtime() and time()

  1. #1
    Join Date
    Jan 2006
    Location
    11 N 78 E
    Posts
    110
    Thanks
    10
    Thanked 1 Time in 1 Post
    Qt products
    Qt4
    Platforms
    Unix/X11

    Default Problem with pointers while using localtime() and time()

    Basically what I want to do is get the current year, month, day, hour, minute and second.

    I know I should use first time() and then pass the result to localtime() after which I can extract the desired values from the members of the tm struct. But the pointers involved in between have me muddled. The following are the declarations of the time() and localtime() functions:
    Qt Code:
    1. time_t time(time_t *tp);
    2. struct tm *localtime(const time_t *tp);
    To copy to clipboard, switch view to plain text mode 
    Now I am confused - If I get it correctly, time(time_t *tp) means that the function time gets some argument, which is equated to time_t *tp. That means (to my foggy brain) that tp is a pointer to a value of type time_t. The documentation says that the current calendar time is returned, and if tp is not NULL then the current calendar time is also assigned to *tp.

    But I do not understand what struct tm *localtime means. Does it mean that localtime returns a pointer? And localtime(const time_t *tp) means that I have to give it a value or pointer (using &) as input? Please explain.

    Turning to the practical details, I have successfully implemented:
    Qt Code:
    1. time_t now;
    2. now = time(NULL);
    3. printf("%d\n",now);
    To copy to clipboard, switch view to plain text mode 
    whereby I get results like 1136698157 etc. Now I would like to know what this number means.

    Also, I face problems when I try to convert the time_t value to a struct tm variable using localtime. If I simply do a
    Qt Code:
    1. struct tm nowtm;
    2. nowtm = localtime(now);
    To copy to clipboard, switch view to plain text mode 
    I get a warning and error for this:
    time.c:12: warning: passing argument 1 of 'localtime' makes pointer
    from integer without a cast
    time.c:12: error: incompatible types in assignment
    So please tell me what I should do. Thanks for your patience and time.
    Last edited by jamadagni; 8th January 2006 at 08:56. Reason: Improve readability
    Penguin #395953 using Qt for open-source development on X11 using C++ and
    Python via PyQt

  2. #2
    Join Date
    Jan 2006
    Location
    Athens - Greece
    Posts
    219
    Thanks
    3
    Thanked 1 Time in 1 Post
    Qt products
    Qt3 Qt4
    Platforms
    Unix/X11 Windows

    Default Re: Problem with pointers while using localtime() and time()

    See the code below you'll get some usefull indications on what to do:
    Qt Code:
    1. time_t timval=time(NULL);
    2. struct tm tims=*(localtime(&timval));
    3. char temp[100];
    4. int year;
    5.  
    6. year=1900+tims.tm_year;
    7.  
    8. sprintf(temp,"%02d/%02d/%04d - %02d:%02d:%02d",
    9. tims.tm_mday,tims.tm_mon+1,year,
    10. tims.tm_hour,tims.tm_min,tims.tm_sec);
    To copy to clipboard, switch view to plain text mode 
    Why don' you use QDateTime insread?
    Last edited by yop; 8th January 2006 at 10:46.

  3. #3
    Join Date
    Jan 2006
    Location
    11 N 78 E
    Posts
    110
    Thanks
    10
    Thanked 1 Time in 1 Post
    Qt products
    Qt4
    Platforms
    Unix/X11

    Default Re: Problem with pointers while using localtime() and time()

    Quote Originally Posted by yop
    struct tm tims=*(localtime(&timval));
    This means that localtime returns a pointer, which is dereferenced by the * and the value stored in the variable tm. And &timval corresponds to const time_t *tp.

    So this means that whenever I see a * inside the argument part of a function declaration, I must understand that that function must be passed a pointer, and the variables so preceded by stars are handled as pointers within the function.

    Similarly whenever I see a * before the function name in the function declaration, that function returns a pointer.

    Why don' you use QDateTime insread?
    Trying to do some pure ANSI C first before jumping into Qt...

    BTW can I know what the meaning of the 1136698157 number is?
    Penguin #395953 using Qt for open-source development on X11 using C++ and
    Python via PyQt

  4. #4
    Join Date
    Jan 2006
    Location
    11 N 78 E
    Posts
    110
    Thanks
    10
    Thanked 1 Time in 1 Post
    Qt products
    Qt4
    Platforms
    Unix/X11

    Default Re: Problem with pointers while using localtime() and time()

    I tried using
    Qt Code:
    1. struct tm now = *localtime(&time(NULL));
    To copy to clipboard, switch view to plain text mode 
    instead of
    Qt Code:
    1. time_t timval = time(NULL); struct tm now = *localtime(&timval);
    To copy to clipboard, switch view to plain text mode 
    and got an error:
    error: invalid lvalue in unary '&'
    Why?
    Penguin #395953 using Qt for open-source development on X11 using C++ and
    Python via PyQt

  5. #5
    Join Date
    Jan 2006
    Location
    Shanghai, China
    Posts
    52
    Thanks
    3
    Qt products
    Qt3 Qt4
    Platforms
    Unix/X11 Windows

    Default Re: Problem with pointers while using localtime() and time()

    Quote Originally Posted by jamadagni
    I tried using
    Qt Code:
    1. struct tm now = *localtime(&time(NULL));
    To copy to clipboard, switch view to plain text mode 
    instead of
    Qt Code:
    1. time_t timval = time(NULL); struct tm now = *localtime(&timval);
    To copy to clipboard, switch view to plain text mode 
    and got an error: Why?
    What time(NULL) returns is not a left value so cannot be 'get-addressed'
    , coz the return value is a temporary value and will be destroyed after the statement.

    BTW can I know what the meaning of the 1136698157 number is?
    read the manual please
    1. Users don't have the manual, and if they did, they wouldn't read it.
    2. In fact, users can't read anything, and if they could, they wouldn't want to.

  6. #6
    Join Date
    Jan 2006
    Posts
    3
    Qt products
    Qt3 Qt4
    Platforms
    Unix/X11

    Default Re: Problem with pointers while using localtime() and time()

    Quote Originally Posted by jamadagni
    But I do not understand what struct tm *localtime means. Does it mean that localtime returns a pointer? And localtime(const time_t *tp) means that I have to give it a value or pointer (using &) as input? Please explain.
    Yes, the localtime() function returns a pointer to tm struct.

    So the following C code should work:

    Qt Code:
    1. time_t now;
    2. struct tm * local;
    3. int year;
    4.  
    5. time( &now );
    6. local = localtime( &now );
    7.  
    8. year = local->tm_year;
    To copy to clipboard, switch view to plain text mode 

    BTW here is a good reference for the standard C time functions: http://www.cplusplus.com/ref/ctime/

  7. #7
    Join Date
    Jan 2006
    Location
    Lincoln, NE USA
    Posts
    177
    Thanks
    3
    Thanked 7 Times in 6 Posts
    Qt products
    Qt4
    Platforms
    Unix/X11 Windows

    Default Re: Problem with pointers while using localtime() and time()

    BTW can I know what the meaning of the 1136698157 number is?
    It is the number of seconds since Jan 1, 1970, 12 AM.
    Do the math!

  8. #8
    Join Date
    Jan 2006
    Location
    11 N 78 E
    Posts
    110
    Thanks
    10
    Thanked 1 Time in 1 Post
    Qt products
    Qt4
    Platforms
    Unix/X11

    Default Re: Problem with pointers while using localtime() and time()

    Quote Originally Posted by GreyGeek
    It is the number of seconds since Jan 1, 1970, 12 AM.
    Do the math!
    Thanks. I later found out from the Linux manpages. And you left out one thing - UTC.
    Penguin #395953 using Qt for open-source development on X11 using C++ and
    Python via PyQt

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •  
Digia, Qt and their respective logos are trademarks of Digia Plc in Finland and/or other countries worldwide.