[R] Problem with POSIXt time zone

raphael.felber at agroscope.admin.ch raphael.felber at agroscope.admin.ch
Fri Feb 14 10:28:40 CET 2014


Thanks a lot for the fast answer. Sys.setenv(TZ="GMT") is a good solution for me.

Best regards

Raphael

-----Ursprüngliche Nachricht-----
Von: Frede Aakmann Tøgersen [mailto:frtog at vestas.com] 
Gesendet: Freitag, 14. Februar 2014 10:02
An: Felber Raphael Agroscope; r-help at r-project.org
Betreff: RE: Problem with POSIXt time zone

Hi Raphael

Bug or not that for others to say. Here is an explanation and a work around.

This is on my Windows 8 laptop and R-3.0.2:


## strptime gives you POSIXlt objects (see ?DateTimeClasses or ?striptime)
> t1 <- strptime(paste("01.01.2013", "20:00:00"),format="%d.%m.%Y 
> %H:%M:%S", tz="GMT")
> t2 <- strptime(paste("02.01.2013", "01:00:00"),format="%d.%m.%Y 
> %H:%M:%S", tz="GMT")

## c is probably doing some conversions. It does that for other classes of objects so be aware!
> c(t1, t2)
[1] "2013-01-01 21:00:00 CET" "2013-01-02 02:00:00 CET"

## see which methods there exists for c() 
> methods(c)
[1] c.bibentry*       c.Date            c.noquote         c.numeric_version
[5] c.person*         c.POSIXct         c.POSIXlt        

   Non-visible functions are asterisked

## since strptime gives POSIXlt this is called
> c.POSIXlt
function (..., recursive = FALSE)
as.POSIXlt(do.call("c", lapply(list(...), as.POSIXct)))
<bytecode: 0x00000000061770e8>
<environment: namespace:base>

## c.POSIXcl converts to POSIXct
## and so c.POISXct is called which does an unclass whereby information on time zone is lost ## the unclass gives us the number of second since 1st Janaury 1970
> c.POSIXct
function (..., recursive = FALSE)
.POSIXct(c(unlist(lapply(list(...), unclass))))
<bytecode: 0x000000000617bd40>
<environment: namespace:base>

## last in c.POSIXct we now call .POSIXct with tz set NULL by default. Is this a bug???? Since tz=NULL by default the time zone information is now read from your locale on your computer (that depends what is set by the OS. On our linux HPC it is set to UTC)
> .POSIXct
function (xx, tz = NULL)
structure(xx, class = c("POSIXct", "POSIXt"), tzone = tz)
<bytecode: 0x000000000aa25ad0>
<environment: namespace:base>

## However when I am dealing with data with timestamps those are usually save in the "UTC" = "GMT" zone format because we get data from all over the world and we do not want to deal with day light saving times. So do this to begin with in the R session: 
> Sys.setenv(TZ="GMT")

## and then we have:
> c(t1, t2)
[1] "2013-01-01 20:00:00 GMT" "2013-01-02 01:00:00 GMT"
>

Yours sincerely / Med venlig hilsen


Frede Aakmann Tøgersen
Specialist, M.Sc., Ph.D.
Plant Performance & Modeling

Technology & Service Solutions
T +45 9730 5135
M +45 2547 6050
frtog at vestas.com
http://www.vestas.com

Company reg. name: Vestas Wind Systems A/S This e-mail is subject to our e-mail disclaimer statement.
Please refer to www.vestas.com/legal/notice If you have received this e-mail in error please contact the sender. 


> -----Original Message-----
> From: r-help-bounces at r-project.org 
> [mailto:r-help-bounces at r-project.org]
> On Behalf Of raphael.felber at agroscope.admin.ch
> Sent: 14. februar 2014 09:24
> To: r-help at r-project.org
> Subject: [R] Problem with POSIXt time zone
> 
> Hello
> 
> I have to convert character strings into POSIXt format. And would like 
> to combine two of them. The following code does not what I expect. The 
> single conversions of the character strings, gives a the date and time 
> with time zone "GMT" as I expect. However if I combine two date time 
> with c() the time zone is changed to CET.
> 
> > strptime(paste("01.01.2013", "20:00:00"),format="%d.%m.%Y %H:%M:%S",
> tz="GMT")
> [1] "2013-01-01 20:00:00 GMT"
> > strptime(paste("02.01.2013", "01:00:00"),format="%d.%m.%Y %H:%M:%S",
> tz="GMT")
> [1] "2013-01-02 01:00:00 GMT"
> > c(strptime(paste("01.01.2013", "20:00:00"),format="%d.%m.%Y
> %H:%M:%S", tz="GMT"),
> +   strptime(paste("02.01.2013", "01:00:00"),format="%d.%m.%Y
> %H:%M:%S", tz="GMT"))
> [1] "2013-01-01 21:00:00 CET" "2013-01-02 02:00:00 CET"
> 
> Is that a bug? How can I solve this problem? I really need the time in 
> the time zone "GMT" else I run into troubles when the time changes to summer time.
> 
> Thanks for any help.
> 
> Kind regards
> 
> Raphael Felber
> PhD Student
> 
> Eidgenössisches Departement für
> Wirtschaft, Bildung und Forschung WBF
> Agroscope
> Institut für Nachhaltigkeitswissenschaften INH Klima und Lufthygiene
> 
> Reckenholzstrasse 191, CH-8046 Zürich
> Tel. +41 44 377 75 11
> Fax  +41 44 377 72 01
> raphael.felber at agroscope.admin.ch<mailto:raphael.felber at agroscope.admi
> n.ch>
> www.agroscope.ch<http://www.agroscope.ch/>
> 
> 
> 	[[alternative HTML version deleted]]




More information about the R-help mailing list