r - R中的日期时间转换

标签 r date time

我知道已经讨论过类似的事情,但这里有一些我还没有找到答案的事情。
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/

相关文章:

r - 图片未显示在 Shiny 应用程序 R 中

r - 为什么 R 找不到 auto.arima 函数?

date - 带有新日期的 Junit()

javascript - 带有变量的日期对象说未定义

r - 如何使用 dplyr 基于行数据生成新列?

r - 在 SpatialPolygonsDataFrame 上绘制 SpatialPointsDataFrame

sql - 在 dplyr (SQL) 中处理日期和连接字符串

Ruby:如何检查日期和时间是否在一个范围内

time - zsh上的时间格式

ruby-on-rails - Ruby(带 Rails)将一串时间转换成秒?