我知道类似的话题已经被讨论过了,但这里有一些我还没有找到答案的问题。
1:日期转换为POSIXct
> Sys.timezone()
[1] "EST"
> as.POSIXct("2011-01-30")
[1] "2011-01-30 EST"
> as.POSIXct(as.Date("2011-01-30"))
[1] "2011-01-29 19:00:00 EST"
> as.POSIXct(as.Date("2011-01-30"), tz="EST")
[1] "2011-01-29 19:00:00 EST"
> as.POSIXct(as.Date("2011-01-30"), tz="GMT")
[1] "2011-01-29 19:00:00 EST"
> as.POSIXct(as.Date("2011-01-30"), tz="America/New_York")
[1] "2011-01-29 19:00:00 EST"
> as.POSIXct(as.Date("2011-01-30"), tz="")
[1] "2011-01-29 19:00:00 EST"
请问为什么如果输入是一个日期,即使我指定了正确的时区,我还是无法得到1月30日午夜?但如果输入是字符字符串,那就可以。
2: 日期/字符转换
两者都非常慢。然后我发现将字符字符串转换为日期,通过先将其转换为POSIXlt实际上要快得多:
> d3.str = "2011-03-02 23:59:00";
> N=10000
> system.time(for(i in 1:N) r5.dt = as.Date(d3.str))
user system elapsed
1.25 0.00 1.24
> system.time(for(i in 1:N) r6.dt = as.Date(strptime(d3.str, format="%Y-%m-%d")))
user system elapsed
0.37 0.00 0.38
> r5.dt
[1] "2011-03-02"
> r5.dt==r6.dt
[1] TRUE
我现在有些困惑。有没有更快、更优雅的方法将一个字符转换为日期?还有,将日期转换为字符,而不是像as.character一样很慢的方法?谢谢!