【发布时间】:2023-03-25 10:43:01
【问题描述】:
我知道已经讨论过类似的事情,但这里有一些事情我还没有找到答案。
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:日期/字符转换。
两者都非常慢。然后我发现将字符串转换为 Date 实际上先将其转换为 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
我现在很困惑。有没有更快、更优雅的方式将字符转换为日期?还有一个 Date 到一个字符而不是 as.character 这也很慢?
提前谢谢你!
【问题讨论】:
-
嗨,加文,感谢您的编辑!现在看起来好多了。