我的一天从2016-03-02 00:00:00
开始。不是2016-03-02 00:00:01
。
如何在当地时间在POSIXct
中获得一天的开始?
我的困惑可能是因为R认为这是2016-03-01的终结日期?考虑到R使用ISO 8601?
例如,如果我试图使用Sys.Date()找到一天的开始:
as.POSIXct(Sys.Date(), tz = "CET")
"2016-03-01 01:00:00 CET"
这是不正确的--但还有其他方法吗?
我知道我可以用一个简单的
as.POSIXct(paste(Sys.Date(), "00:00:00", sep = " "), tz = "CET")
但必须有更正确的方法来做到这一点吗?R基优先。
发布于 2016-03-02 04:56:55
这是一个命令--但是你想要as.POSIXlt()
R> as.POSIXlt(Sys.Date())
[1] "2016-03-02 UTC"
R> format(as.POSIXlt(Sys.Date()), "%Y-%m-%d %H:%M:%S")
[1] "2016-03-02 00:00:00"
R>
只有当转换为POSIXct
时,偏移到UTC的时区(对我来说是6小时)才进入:
R> as.POSIXct(Sys.Date())
[1] "2016-03-01 18:00:00 CST"
R>
不用说,通过对两者进行包装,您将得到所需的类型和值。
R> as.POSIXct(as.POSIXlt(Sys.Date()))
[1] "2016-03-02 UTC"
R>
再次申请在不需要润滑油或其他非基础R包。
发布于 2016-03-02 00:40:42
尽管你喜欢R基,但对于"smart“的某些含义来说,"smart”的意思是“智能方式”,这是可以理解的:
library(lubridate)
x <- floor_date(Sys.Date(),"day")
> format(x,"%Y-%m-%d-%H-%M-%S")
[1] "2016-03-02-00-00-00"
来自?floor_date
floor_date接受日期-时间对象,并将其舍入到指定时间单位的最接近的整数值。
挺方便的。
发布于 2016-03-01 02:28:04
你的例子有点不清楚。
您正在讨论的是一天开始的1分钟的差异,但是您的示例显示了由于时区造成的1小时的差异。
你可以试试
?POSIXct
才能解释其功能。
使用Sys.Date()和POSIXct以某种方式覆盖您的时区设置。
as.POSIXct(Sys.Date(), tz="EET")
"2016-03-01 01:00:00 CET"
当输入字符串时
as.POSIXct("2016-03-01 00:00:00", tz="EET")
"2016-03-01 EET"
看来00:00实际上是一天的开始。您可以根据以下两个不等式的结果得出这个结论
as.POSIXct("2016-03-02 00:00:02 CET")>as.POSIXct("2016-03-02 00:00:01 CET")
真的
as.POSIXct("2016-03-02 00:00:01 CET")>as.POSIXct("2016-03-02 00:00:00 CET")
真的
所以这是一个时区问题。注意,00:00:00将自动从as.POSIXct结果中删除。
as.POSIXct("2016-03-02 00:00:00 CET")
"2016-03-02 CET“
https://stackoverflow.com/questions/35720154
复制