非常基本,只是不了解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中有很多这些,所以效率很重要。
答案 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
选项。