[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