After the discussions which really helped me understanding the issues involved let me summarize some possibly surprising behavior of as.POSIXlt and as.POSIXct and the print method of class POSIXlt (the print method problem seems to be a Windows only problem) in R 2.3.1
- as.POSIXlt and as.POSIXct accept but ignore tz parameters when the argument object is of class Date. They do react to tz parameters when the argument object is a string representing a date. > as.POSIXct(firstjan) [1] "2006-01-01 01:00:00 CET" > as.POSIXct(firstjan,tz="HST10") [1] "2006-01-01 01:00:00 CET" > as.POSIXlt(firstjan) [1] "2006-01-01" > as.POSIXlt(firstjan,tz="HST10") [1] "2006-01-01" > as.POSIXct(as.character(firstjan)) [1] "2006-01-01 CET" > as.POSIXct(as.character(firstjan),tz="HST10") [1] "2006-01-01 HST" > as.POSIXlt(as.character(firstjan)) [1] "2006-01-01" > as.POSIXlt(as.character(firstjan),tz="HST10") [1] "2006-01-01 HST10" Furthermore, for string arguments the timezone label for as.POSIXct and as.POSIXlt is different in the example above ("HST" and "HST10") - as.POSIXlt in R 2.4.0alpha (I could test this only on Windows) seems to behave slightly differently, it attaches timezone UTC for inputs of class Date. > as.POSIXlt(firstjan) [1] "2006-01-01 UTC" > as.POSIXlt(firstjan,tz="HST10") [1] "2006-01-01 UTC" It still does not attach a timezone if the input is a string representing a date (like in the first example). - as.POSIXct will give different results for Date objects and their string representations in non-UTC timezones (the first example illustrates this fact) - the print method for POSIXlt objects on Windows in some cases will not display the correct timezone label, it will convert it to a sometimes somewhat strange 3 letter string. The docs state that timezone labels have to have a standardized format, but (at least for me) it is unexpected that using Sys.timezone() as tz argument gives a very strange timezone label. See the following example > Sys.time() [1] "2006-09-05 23:05:48 W. Europe Daylight Time" > as.POSIXct(Sys.time(),tz=Sys.timezone()) [1] "2006-09-05 23:06:06 W. Europe Daylight Time" > as.POSIXlt(Sys.time(),tz=Sys.timezone()) [1] "2006-09-05 22:06:11 Eur" -- Erich Neuwirth, University of Vienna Faculty of Computer Science Computer Supported Didactics Working Group Visit our SunSITE at http://sunsite.univie.ac.at Phone: +43-1-4277-39464 Fax: +43-1-4277-39459 ______________________________________________ R-devel@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-devel