I'd been trying to look through a dataframe extracting all rows where the date component of a POSIXct column matched a certain value.I came across the following which is confusing me mightily:: as.Date(as.POSIXct(...))
doesn't always return the correct date.
> dt <- as.POSIXct('2012-08-06 09:35:23')
[1] "2012-08-06 09:35:23 EST"
> as.Date(dt)
[1] "2012-08-05"
Why is the date of '2012-08-06 09:35:23' equal to '2012-08-05?
I suspect it's something to do with different timezones being used, so noting that the timezone of dt
was 'EST' I gave this to as.Date
::
> as.Date(as.POSIXct('2012-08-06 09:35:23'), tz='EST')
[1] "2012-08-05"
But it still returns 2012-08-05.
Why is this? How can I find all datetimes in my dataframe that were on the date 2012-08-06? (as subset(my.df, as.character(as.Date(datetime), tz='EST') == '2012-08-06')
does not return the row with datetime dt
even though this did occur on the date 2012-08-06...)?
Added details: Linux 64bit (though can reproduce on 32bit), can get this on both R 3.0.1 & 3.0.0, and I am currently AEST (Australian Eastern Standard Time)
The documentation for timezones is confusing to me too. In some case EST may not be unambiguous and may actually refer to a tz in Australia. Try "EST5EDT" or "America/New_York".
In this case it could also relate to differences in how your unstated OS handles the 'tz' argument, since I get "2012-08-06". ( I'm in PDT US tz at the moment, although I'm not sure that should matter. )Changing which function gets the tz argument may clarify (or not):
If you omit the tz from
as.POSIXct
then UTC is assumed.These are the unambiguous names of the Ozzie TZ's (at least on my Mac):
Fellow Australian chiming in here (Brisbane location, Win7 Enterprise 64 bit, R3.0.1):
I can replicate your issue:
Since
as.Date
defaults toUTC
(GMT) as listed in?as.Date
:Forcing the
POSIXct
representation to UTC then works as expected:Alternatively, matching them both to my local
tz
works fine too:Edit: Ambiguity with the
EST
specification seems to be an issue for me:Default use of
as.POSIXct
Ambiguous
EST
- should be the same as defaultUnambiguous Brisbane, Australia timezone
Differences