R中从POSIXct到日期的日期转换
Posted
技术标签:
【中文标题】R中从POSIXct到日期的日期转换【英文标题】:Date conversion from POSIXct to Date in R 【发布时间】:2013-05-09 13:14:11 【问题描述】:谁能告诉我为什么 R 在下面给出这样的结果:
> as.POSIXct("2013-01-01 08:00")
[1] "2013-01-01 08:00:00 HKT"
> as.Date(as.POSIXct("2013-01-01 08:00"))
[1] "2013-01-01"
> as.POSIXct("2013-01-01 07:00")
[1] "2013-01-01 07:00:00 HKT"
> as.Date(as.POSIXct("2013-01-01 07:00"))
[1] "2012-12-31"
2013-01-01 07:00
的POSIXct
转换为Date
后不应该是2013-01-01
吗,有什么办法可以将截止从08:00
更改为00:00
?
更新 #1
我发现以下方法可以解决我的问题,但方式不太整洁
> as.Date(as.character(as.POSIXct("2013-01-01 07:00")))
[1] "2013-01-01"
【问题讨论】:
这里有一个类似的问题和答案可能会感兴趣:***.com/questions/62743019/… 【参考方案1】:这里的问题是时区 - 你可以看到你在"HKT"
。试试:
as.Date(as.POSIXct("2013-01-01 07:00", 'GMT'))
[1] "2013-01-01"
来自?as.Date()
:
["
POSIXct
" is] 通过忽略午夜之后的时间转换为天 在指定时区的时间表示中,默认UTC
【讨论】:
【参考方案2】:使用as.Date
的时区参数:
as.Date(as.POSIXct("2013-01-01 07:00",tz="Hongkong"))
#[1] "2012-12-31"
as.Date(as.POSIXct("2013-01-01 07:00",tz="Hongkong"),tz="Hongkong")
#[1] "2013-01-01"
事实上,我建议在使用日期时间转换函数时始终使用tz
参数。还有其他令人讨厌的惊喜,例如有夏令时。
【讨论】:
在暗示夏令时后值得一提的是,有时您需要输入 tz="" 才能使其正常工作。我真的不知道为什么,我只是不惜一切代价避免POSIXct
。
这是最好的答案(并且应该得到绿色勾号),因为它对日期中应用的 tz 参数(不是as.POSIXct
)更加彻底和准确,而不是OP的绿色勾号答案.【参考方案3】:
当同期 UTC 时间在您的 POSIXct 日期的午夜之前(您的第三个示例)或午夜之后时,会发生这种情况,如记录和先前解释的那样。要亲自查看数学,请在控制台检查 as.Date.POSIXct
。默认tz="UTC"
下的数学很清楚。在非默认情况下,R 本质上调用as.Date.POSIXlt
,而date-travel
不会发生。事实上,如果你从 lt
对象开始,你就不会遇到这个问题:
> as.Date(as.POSIXlt("2013-01-01 07:00", tz = "Hongkong"))
[1] "2013-01-01"
最简单的解决方法是使用tz=""
调用 as.Date 来强制使用不那么冒犯的as.Date.POSIXlt
算法:
> as.Date(as.POSIXct("2013-01-01 07:00"), tz = "")
[1] "2013-01-01"
【讨论】:
我需要纠正自己。 tz="" 并不总是有效。如果您不想更改 POSIXct 对象 x 的时区,请先直接转到 POSIXlt,然后再转到日期:as.Date(as.POSIXlt(x))以上是关于R中从POSIXct到日期的日期转换的主要内容,如果未能解决你的问题,请参考以下文章
使用输入“2016-09-25 17:13:46.030”将日期和时间从 Excel 转换为 R