as.POSIXlt忽略tz参数

时间:2016-01-15 19:26:51

标签: r

非常基本,只是不了解tz参数是什么,如果不是为了...

dateIWantToConvert <- as.Date("2013-06-01") #the format of my starting object

as.POSIXlt(dateIWantToConvert, tz="America/Chicago")
[1] "2013-06-01 UTC"

在data.frame中有很多这些,所以效率很重要。

3 个答案:

答案 0 :(得分:3)

您可以在没有as.Date()的情况下尝试:

> as.POSIXlt("2013-06-01", tz="America/Chicago")
#[1] "2013-06-01 CDT"

答案 1 :(得分:3)

更可靠的方法是使用strptime。这需要tz的任何OlsonNames()争论。而且可靠,我的意思是这应该是独立于操作系统的。

(vec.Date <- strptime("2013-06-01", format = "%Y-%m-%d", tz = "America/Chicago"))
# "2013-06-01 CDT"
class(vec.Date)
# [1] "POSIXlt" "POSIXt" 

关于效率的问题,你真的应该使用strptime。见Difference between as.POSIXct/as.POSIXlt and strptime for converting character vectors to POSIXct/POSIXlt

答案 2 :(得分:0)

根据?timezones,无效时区经常被视为UTC而没有警告。您的特定环境可能不知道如何解释&#34; America / Chicago&#34;。文档指出它不一致。

尝试使用"CDT"代替&#34; America / Chicago&#34;。或者,?timezones中有关于如何提供R要解释的时区格式列表的详细信息。

更新:as.Date返回&#34;日期&#34;对象,而不是字符串。 as.POSIXlt将引用:&#34;没有时间的日期被视为在UTC {34}的午夜和as.POSIXlt。因此,如果x date中的as.POSIXlt对象似乎没有时间价值,则tz选项会被忽略并替换为UTC

因此,另一个选择是确保传递给date的{​​{1}}对象有时间&amp;时区已经指定。或者,在将对象传递给as.POSIXlt之前将其转换为字符串,以便它使用自己的as.POSIXlt选项。