as.POSIXct("2011-01-30")-6ren">
gpt4 book ai didi

r - R中的日期时间转换

转载 作者:行者123 更新时间:2023-12-01 07:29:29 25 4
gpt4 key购买 nike

我知道已经讨论过类似的事情,但这里有一些我还没有找到答案的事情。
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 这也很慢?
先感谢您!

最佳答案

在 as.POSIXct 帮助页面的早期,我们读到:“没有时间的日期被视为在 UTC 午夜。”您期望 'tz' 参数会改变这一点是完全错误的。如果将输出指定为 UCT,则可以获得原始日期:

 strftime(as.POSIXct(as.Date("2011-01-30")), format="%Y-%m-%d %H:%M:%S", tz="UCT")
#[1] "2011-01-30 00:00:00"

如果你真的只想约会,那么你应该使用 as.Date .

关于r - R中的日期时间转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8827767/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com