Karl Ove Hufthammer
2012-Mar-12  14:29 UTC
[Rd] Invalid date-times and as.POSIXct problems (remotely related to DST issues)
I think this should be handled as a bug, but I?m not sure which
platforms and versions it applies to, so I?m writing to this list. The
problem is that as.POSIXct on character strings behaves in a strange way
if one of the date-times are invalid; it converts all the date-times to
dates (i.e., it discards the time part).
Example, which I suspect only works on my locale, with the UTC+1/UTC+2
timezone:
  $ dates=c("2003-10-13 00:15:00", "2008-06-03 14:45:00",
"2003-03-30 02:00:00")
Note that the last date-time doesn?t actually exist 
(due to daylight saving time):
http://www.timeanddate.com/worldclock/meetingtime.html?day=30&month=3&year=2003&p1=187&iv=0
  $ d12=as.POSIXct(dates)
  $ d123=as.POSIXct(dates[1:2])
  $ d12
  [1] "2003-10-13 CEST" "2008-06-03 CEST" "2003-03-30
CET"
  $ d123
  [1] "2003-10-13 00:15:00 CEST" "2008-06-03 14:45:00 CEST"
When I include all values, they are all converted to (POSIXct) *dates*,
but if I exclude the invalid one, the rest are properly converted to
(POSIXct) date-times. Note that this is not just a display issue:
 $ unclass(d12)
 [1] 1065996000 1212444000 1048978800
 attr(,"tzone")
 [1] ""
 $ unclass(d123)
 [1] 1065996900 1212497100
 attr(,"tzone")
 [1] ""
I can only reproduce this on Windows; on Linux all the strings are
converted to date-times (the last one to 2003-03-30 01:00:00 CET).
However, if ones specifies a completely invalid time, e.g., 25:00, the
same thing does happen on Linux (2.14.2 Patched). I think the right/best
behaviour would be to convert the invalid date-time string to NA and
convert the other ones proper POSIXct date-times, and perhaps issue a
warning about NAs being generated.
(I originally discovered this problem on data from an Oracle database,
using sqlQuery() from the RODBC package, which automatically converts
date-times to date-times in current timezone (except if you specify
as.is=TRUE), and was surprised that for some queries the date-times were
truncated to dates. A warning that parts of the data were invalid would
be very welcome.)
Version details (for Windows):
$ version
                _
platform       i386-pc-mingw32
arch           i386
os             mingw32
system         i386, mingw32
status
major          2
minor          14.2
year           2012
month          02
day            29
svn rev        58522
language       R
version.string R version 2.14.2 (2012-02-29)
$ sessionInfo()
R version 2.14.2 (2012-02-29)
Platform: i386-pc-mingw32/i386 (32-bit)
locale:
[1] LC_COLLATE=Norwegian-Nynorsk_Norway.1252 
LC_CTYPE=Norwegian-Nynorsk_Norway.1252   
LC_MONETARY=Norwegian-Nynorsk_Norway.1252
[4] LC_NUMERIC=C                             
LC_TIME=Norwegian-Nynorsk_Norway.1252
attached base packages:
[1] stats     graphics  grDevices datasets  utils     methods   base
-- 
Karl Ove Hufthammer
Karl Ove Hufthammer
2012-Mar-14  08:10 UTC
[Rd] Invalid date-times and as.POSIXct problems (remotely related to DST issues)
Karl Ove Hufthammer wrote:> I think this should be handled as a bug, but I?m not sure which > platforms and versions it applies to, so I?m writing to this list.No response, so I?ve filed a bug at https://bugs.r-project.org/bugzilla3/show_bug.cgi?id=14845 (with some additional info). -- Karl Ove Hufthammer