[datatable-help] Losing timezone of POSIX datetimes
Matthew Dowle
mdowle at mdowle.plus.com
Tue Dec 13 20:05:50 CET 2011
Agreed. Please raise a bug.report(package="data.table") so it doesn't
get forgotten, with this simpler example. Thanks.
> attributes(as.POSIXct("2011-12-13 18:50", tz="EST"))
$class
[1] "POSIXct" "POSIXt"
$tzone
[1] "EST"
> DT = data.table(a=c(1,1,2,2,2))
> attributes(DT[,as.POSIXct("2011-12-13 18:50", tz="EST"),by=a][[2]])
$class
[1] "POSIXct" "POSIXt"
>
On Tue, 2011-12-13 at 09:29 +0100, Karl Ove Hufthammer wrote:
> Data tables seems to be losing the time zone of POSIX variables.
> I believed this should be considered a bug. Here’s a simple example:
>
> -------------
> # Create and date and time from some numbers
> makeUTCDateTime=function(hourmin) {
> td=paste("2011-12-13 ", hourmin, ":", hourmin, sep="")
> td=as.POSIXct(td, tz="UTC")
> data.frame(UTCDateTime=td)
> }
>
> # Create a data.table containing some numbers
> d=data.table(hourmin=10:14)
>
> # Direct use of makeUTCDateTime
> x=makeUTCDateTime(d$hourmin)
> x # Correct time
> str(unclass(x$UTCDateTime)) # Correct timezone
>
>
> # Using a data.table to run makeUTCDateTime
> d=data.table(hourmin=10:14)
> y=d[,makeUTCDateTime(hourmin), by=hourmin]
> y # Wrong time?
> str(unclass(y$UTCDateTime)) # No timezone specified (local time zone
> # assumed when displaying the datetime)
> -------------
>
> When using makeUTCDateTime directly to create a data.frame, we get
> the correct (UTC) datetime:
>
> > x
> UTCDateTime
> 1 2011-12-13 10:10:00
> 2 2011-12-13 11:11:00
> 3 2011-12-13 12:12:00
> 4 2011-12-13 13:13:00
> 5 2011-12-13 14:14:00
> > str(unclass(x$UTCDateTime))
> atomic [1:5] 1323771000 1323774660 1323778320 1323781980 1323785640
> - attr(*, "tzone")= chr "UTC"
>
> But when using data.table functionality, we get a POSIXct variable without a
> ‘tzone’ attribute, which is then interpreted to be in local time (CET in
> this case) when displaying the result:
>
> > y
> hourmin UTCDateTime
> [1,] 10 2011-12-13 11:10:00
> [2,] 11 2011-12-13 12:11:00
> [3,] 12 2011-12-13 13:12:00
> [4,] 13 2011-12-13 14:13:00
> [5,] 14 2011-12-13 15:14:00
> > str(unclass(y$UTCDateTime))
> num [1:5] 1323771000 1323774660 1323778320 1323781980 1323785640
>
> System details:
>
> > sessionInfo()
> R version 2.14.0 Patched (2011-11-01 r57534)
> Platform: x86_64-unknown-linux-gnu (64-bit)
>
> locale:
> [1] LC_CTYPE=nn_NO.UTF-8 LC_NUMERIC=C
> [3] LC_TIME=nn_NO.UTF-8 LC_COLLATE=nn_NO.UTF-8
> [5] LC_MONETARY=nn_NO.UTF-8 LC_MESSAGES=nn_NO.UTF-8
> [7] LC_PAPER=C LC_NAME=C
> [9] LC_ADDRESS=C LC_TELEPHONE=C
> [11] LC_MEASUREMENT=nn_NO.UTF-8 LC_IDENTIFICATION=C
>
> attached base packages:
> [1] stats graphics grDevices utils datasets methods base
>
> other attached packages:
> [1] data.table_1.7.6
>
> loaded via a namespace (and not attached):
> [1] tools_2.14.0
>
> --
> Karl Ove Hufthammer
>
> _______________________________________________
> datatable-help mailing list
> datatable-help at lists.r-forge.r-project.org
> https://lists.r-forge.r-project.org/cgi-bin/mailman/listinfo/datatable-help
More information about the datatable-help
mailing list