[R] Fwd: strptime() problem? - Resolved

Gabor Grothendieck ggrothendieck at myway.com
Sun Aug 22 17:08:19 CEST 2004


Hi,

Unfortunately, in my time zone I cannot reproduce your problem.
For example,

> rain
[1] "25/03/2000 22:00:00 UTC" "25/03/2000 23:00:00 UTC"
[3] "26/03/2000 00:00:00 UTC" "26/03/2000 01:00:00 UTC"
[5] "26/03/2000 02:00:00 UTC" "26/03/2000 03:00:00 UTC"
[7] "26/03/2000 04:00:00 UTC" "26/03/2000 05:00:00 UTC"
> str(rain)
 chr [1:8] "25/03/2000 22:00:00 UTC" "25/03/2000 23:00:00 UTC" ...
> rain.lt <- strptime(rain, format="%d/%m/%Y %H:%M:%S")
> rain.lt
[1] "2000-03-25 22:00:00" "2000-03-25 23:00:00" "2000-03-26 00:00:00"
[4] "2000-03-26 01:00:00" "2000-03-26 02:00:00" "2000-03-26 03:00:00"
[7] "2000-03-26 04:00:00" "2000-03-26 05:00:00"
> rain.ct <- as.POSIXct(rain.lt,tz="GMT")
> rain.ct
[1] "2000-03-25 22:00:00 GMT" "2000-03-25 23:00:00 GMT"
[3] "2000-03-26 00:00:00 GMT" "2000-03-26 01:00:00 GMT"
[5] "2000-03-26 02:00:00 GMT" "2000-03-26 03:00:00 GMT"
[7] "2000-03-26 04:00:00 GMT" "2000-03-26 05:00:00 GMT"
> R.version.string  # Windows XP
[1] "R version 1.9.1, 2004-08-03"

Without being able to reproduce it, its difficult for me to 
figure out what is wrong.  It seems to be ignoring the tz=
on the conversion to POSIXct.  I mentioned that I noticed
that it sometimes seems to ignore this parameter in my
recent R News article but have never attempted to track down
this behavior further.

What I can say is that, in gereral,
I have found that I wasted a lot of time on subtle aspects
related to time zones even when my underlying problem actually
had nothing to do with time zones so in order to avoid all
those difficulties I converted all my software from POSIXt 
to chron (which does not use time zones in the first place
and so cannot run into suchh problems) and I provided a table 
in the latest R News showing the translation of some idioms.  
This solved everything for me.


Date:   	Wed, 18 Aug 2004 11:20:01 +0200
From:   	javier garcia - CEBAS <rn001 at cebas.csic.es>
To:   	Gabor Grothendieck <ggrothendieck at myway.com>, <r-help at stat.math.ethz.ch>
Subject:   	RE: [R] Fwd: strptime() problem? - Resolved

Hi Gabor and everybody;

Thanks Gabor, with the alternative step you've told me the problem is
resolved. Comparing the two procedures:

Extract from the source 'character' data:

> rain$ts[2039:2046]
[1] "25/03/2000 22:00:00 UTC" "25/03/2000 23:00:00 UTC"
[3] "26/03/2000 00:00:00 UTC" "26/03/2000 01:00:00 UTC"
[5] "26/03/2000 02:00:00 UTC" "26/03/2000 03:00:00 UTC"
[7] "26/03/2000 04:00:00 UTC" "26/03/2000 05:00:00 UTC"

Proc 1. The 5th el. of the obtained POSIXct serie goes out of itself
---------------------------------------------------------------------------------
> rain.strptime <- strptime(rain$ts, format="%d/%m/%Y %H:%M:%S")
> rain.strptime.ct <- as.POSIXct(rain.strptime,tz="GMT")
> rain.strptime.ct[2039:2046]
[1] "2000-03-25 23:00:00 CET" "2000-03-26 00:00:00 CET"
[3] "2000-03-26 01:00:00 CET" "2000-03-26 03:00:00 CEST"
[5] "2000-03-26 05:00:00 CEST" "2000-03-26 05:00:00 CEST"
[7] "2000-03-26 06:00:00 CEST" "2000-03-26 07:00:00 CEST"
> format(rain.strptime.ct[2039:2046],tz="GMT",usetz=TRUE)
[1] "2000-03-25 22:00:00 GMT" "2000-03-25 23:00:00 GMT"
[3] "2000-03-26 00:00:00 GMT" "2000-03-26 01:00:00 GMT"
[5] "2000-03-26 03:00:00 GMT" "2000-03-26 03:00:00 GMT"
[7] "2000-03-26 04:00:00 GMT" "2000-03-26 05:00:00 GMT"
> as.numeric(rain.strptime.ct[2039:2046])
[1] 954021600 954025200 954028800 954032400 954039600 954039600 954043200
[8] 954046800

Proc 2. The obtained POSIXct serie is continuous, and it seems OK for me.
---------------------------------------------------------------------------------
rain.chron <-
chron(substring(rain$ts,1,10),substring(rain$ts,12,19),format=c("d/m/y","h:m:s"))
rain.chron.ct <- as.POSIXct(rain.chron,tz="GMT")
> rain.chron.ct[2039:2046]
[1] "2000-03-25 23:00:00 CET" "2000-03-26 00:00:00 CET"
[3] "2000-03-26 01:00:00 CET" "2000-03-26 03:00:00 CEST"
[5] "2000-03-26 04:00:00 CEST" "2000-03-26 05:00:00 CEST"
[7] "2000-03-26 06:00:00 CEST" "2000-03-26 07:00:00 CEST"
> format(lluvia.chron.ct[2039:2046],tz="GMT",usetz=TRUE)
[1] "2000-03-25 22:00:00 GMT" "2000-03-25 23:00:00 GMT"
[3] "2000-03-26 00:00:00 GMT" "2000-03-26 01:00:00 GMT"
[5] "2000-03-26 02:00:00 GMT" "2000-03-26 03:00:00 GMT"
[7] "2000-03-26 04:00:00 GMT" "2000-03-26 05:00:00 GMT"
> as.numeric(rain.chron.ct[2039:2046])
[1] 954021600 954025200 954028800 954032400 954036000 954039600 954043200
[8] 954046800


For me the problem is resolved by mean of package 'chron'. And it's as direct
as the use of the first procedure. Just as a comment, I think that for a
proper behaviour, the first procedure should give the same result. Shouldn't
it?

Thanks all and best regards.
-------
-------

El Mar 17 Ago 2004 20:02, javier garcia - CEBAS escribió:
> ---------- Mensaje reenviado ----------
>
> Subject: RE: [R] Fwd: strptime() problem?
> Date: Tue, 17 Aug 2004 11:57:46 -0400 (EDT)
> From: "Gabor Grothendieck" <ggrothendieck at myway.com>
> To: rn001 at cebas.csic.es, ripley at stats.ox.ac.uk, r-help at stat.math.ethz.ch
>
> I am in a different time zone, EDT, on Windows XP and can't
> replicate this but you might try reading the latest R News
> article on dates and times for some ideas, viz. page 32 of:
>
> http://cran.r-project.org/doc/Rnews/Rnews_2004-1.pd
>
> In particular, try converting them to chron and then doing
> your manipulations in chron or else convert them from chron to
> POSIXct:
>
> require(chron)
> r.asc <- raincida$ts
> r.chron <- chron(substring(r.asc, 1, 10),
> substring(r.asc, 12, 19), format = c("d/m/y", "h:m:s"))
>
> r.ct <- as.POSIXct(r.chron)
> format(r.ct, tz="GMT") # display POSIXct in GMT
>
> Date:      Tue, 17 Aug 2004 16:25:12 +0200
> From:      javier garcia - CEBAS <rn001 at cebas.csic.es>
> To:      Prof Brian Ripley <ripley at stats.ox.ac.uk>,
> <r-help at stat.math.ethz.ch> Subject:      [R] Fwd: strptime() problem?
>
> Hi all;
> I've already send a similar e-mail to the list and Prof. Brian Ripley
> answered me but my doubts remain unresolved. Thanks for the clarification,
> but perhaps I wasn't clear enough in posting my questions.
>
> I've got a postgres database which I read into R. The first column is
> Timestamp with timezone, and my data are already in UTC format. An
> 'printed' extract of R character column, resulting from the timestamptz
> field is:
>
> raincida$ts:
>
> [2039] "25/03/2000 22:00:00 UTC" "25/03/2000 23:00:00 UTC"
> [2041] "26/03/2000 00:00:00 UTC" "26/03/2000 01:00:00 UTC"
> [2043] "26/03/2000 02:00:00 UTC" "26/03/2000 03:00:00 UTC"
> [2045] "26/03/2000 04:00:00 UTC" "26/03/2000 05:00:00 UTC"
>
> #And I need to convert this character column into POSIXct, for eventual
> work. #As I can see in the documentation, the process is to use strptime(),
> what #creates an object POSIXlt and doesn't allow to specify that the time
> zone of #the data is already UTC; followed by as.POSIXct()
>
> > lluvia.strptime <- strptime(raincida$ts, format="%d/%m/%Y %H:%M:%S")
> > lluvia.strptime.POSIXct <- as.POSIXct(lluvia.strptime,tz="GMT")
>
> A "printed" extract is:
>
> [2039] "2000-03-25 22:00:00 GMT" "2000-03-25 23:00:00 GMT"
> [2041] "2000-03-26 00:00:00 GMT" "2000-03-26 01:00:00 GMT"
> [2043] "2000-03-26 03:00:00 GMT" "2000-03-26 03:00:00 GMT"
> [2045] "2000-03-26 04:00:00 GMT" "2000-03-26 05:00:00 GMT"
>
> As we can see, elements [2043] differ. Shouldn't they be similar as the
> rest of the other shown elements? I thought this was a bug, but it seems
> that I've got and conceptual error.(?). This happens several times in my
> data, and produces eventual errors.
>
> Please, how could I resolved this?
>
> Thanks all, and best regards,
>
> Javier G.




More information about the R-help mailing list