Skip to content

POSIXlt vs POSIXct

10 messages · Steven R Corsi, Duncan Murdoch, R. Michael Weylandt +3 more

#
Hello R users

I am searching for a descriptive summary of the use of POSIXlt as 
compared to POSIXct date/time formats. I have been using them 
extensively for different purposes, but still can't quite understand 
when to use which one for the most efficient coding and use. I typically 
use them in graphics, comparison of times, interpolation of values 
between times, computation of time-series parameters, and so on.

My request is simply to learn if there is a resource out there that 
explains the strengths of the use of each format in different situations 
and if certain situations require one over the other. My web searches 
have turned up basic things like the vector form (POSIXlt) vs the 
decimal form (POSIXct), but I could not find specific guidance to 
understand when it is best to use one over the other.

Thanks
Steve
#
On 28/03/2012 10:06 AM, Steven R Corsi wrote:
The first of the "Other Topics" among the "Technical Papers" available 
from the main HTML help page in R should address this.

Duncan Murdoch
1 day later
#
Thanks very much for the response. That was a very good article and 
gives me a good appreciation for the history and covers the structure of 
the two date/time formats well.

What I was specifically looking for is a feel for the situations when 
one format should be used over the other. In my work, I have gotten the 
impression that I should just use POSIXct for general useability in 
functions and graphics until I need to extract specific date components 
such as month, day, year, etc. In those instances, just convert to 
POSIXlt and extract needed info. Is this mostly accurate? More 
generally, is there a resource that summarizes which date/time objects 
to use under which conditions? So far, I have mostly been learning by 
trial/error/web searching which eventually is effective, but can be 
quite slow.

Thanks
Steve

===============================================
Steven R. Corsi        Phone: (608) 821-3835
Research Hydrologist   email: srcorsi at usgs.gov
U.S. Geological Survey
Wisconsin Water Science Center
8505 Research Way
Middleton, WI 53562
===============================================
On 3/28/2012 12:16 PM, Duncan Murdoch wrote:
#
That's generally my reaction to them, but you should also read "R News
4/1 -- Help Desk"
(http://cran.r-project.org/doc/Rnews/Rnews_2004-1.pdf) which gives
some tips on Date()s and the various time classes.

Best, Michael
On Thu, Mar 29, 2012 at 2:19 PM, Steven R Corsi <srcorsi at usgs.gov> wrote:
#
Thanks for the link Michael. This is a very good explanation with some 
very useful tips on which date classes to use for different purposes. It 
generally strengthened the concept that POSIXct is the way to go unless 
you need to extract specific components of the date from POSIXlt. Since 
strptime() appears to be the primary conversion route from character 
class with dates/times/time zones to a date/time class, and since 
strptime() results in a POSIXlt format, that was what I was commonly 
using in past applications. That format, at times, gave me errors in 
situations where I didn't expect them. Now it is clear that the second 
step of conversion to POSIXct is preferred for many purposes.

Best Regards
Steve

===============================================
Steven R. Corsi        Phone: (608) 821-3835
Research Hydrologist   email: srcorsi at usgs.gov
U.S. Geological Survey
Wisconsin Water Science Center
8505 Research Way
Middleton, WI 53562
===============================================
On 3/29/2012 1:28 PM, R. Michael Weylandt wrote:
#
I also find that POSIXct is generally the most useful, and only use
POSIXlt in special cases.

But have you considered as.POSIXct() instead of strptime()? It works for
me, and I can't remember the last time I had to use strptime() for
converting character to date/time. (But I mostly don't work with multiple
time zones, except for converting to/from UTC.

-Don
#
That is a good tip. I have tried it and found that it works if I make 
sure it was converted to character first. strptime appears to accept 
factor variables which is the default when reading in the file originally.

Thanks
Steve
On 3/29/2012 2:31 PM, MacQueen, Don wrote:
#
On 29/03/2012 21:05, Steven R Corsi wrote:
I would say that POSIXct is the way to go if you know the timezone of 
the datetimes (it is essential to do the conversion).  But you don't 
always do so, and then POSIXlt can be useful (although assuming UTC can 
also work).

Several times a month we get help requests about times on DST 
transitions which shows that people too often think they know the 
timezone and in fact do not (as the times are invalid or ambiguous in 
the assumed timezone).

as.POSIXct does work with factors ....

z <- "2012-03-29 21:20:05"
 > as.POSIXct(z)
[1] "2012-03-29 21:20:05 BST"
 > as.POSIXct(factor(z))
[1] "2012-03-29 21:20:05 BST"

  
    
1 day later
#
On 29.03.2012 23:44, Steven R Corsi wrote:
Works for me in R-release.

Uwe Ligges