R 如何在POSIXct中开始一天
我的一天从2016-03-02 00:00:00开始。不R 如何在POSIXct中开始一天,r,timezone,posixct,R,Timezone,Posixct,我的一天从2016-03-02 00:00:00开始。不2016-03-02 00:00:01 如何在当地时间的POSIXct中开始一天 我的困惑可能是因为R认为这是2016-03-01的结束日期?假设R使用ISO 8601 例如,如果我尝试使用Sys.Date()查找一天的开始: 这是不正确的,但还有其他方法吗 我知道我可以用一个简单的 as.POSIXct(paste(Sys.Date(), "00:00:00", sep = " "), tz = "CET") 但必须有一个更正确的方法来
2016-03-02 00:00:01
如何在当地时间的POSIXct
中开始一天
我的困惑可能是因为R认为这是2016-03-01的结束日期?假设R使用ISO 8601
例如,如果我尝试使用Sys.Date()查找一天的开始:
这是不正确的,但还有其他方法吗
我知道我可以用一个简单的
as.POSIXct(paste(Sys.Date(), "00:00:00", sep = " "), tz = "CET")
但必须有一个更正确的方法来做到这一点?基础R优先 你的例子有点不清楚 您所说的是一天开始时相差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: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”尽管您可以理解地更喜欢base R,“智能方式”,对于“智能”的某些含义,将是:
library(lubridate)
x <- floor_date(Sys.Date(),"day")
> format(x,"%Y-%m-%d-%H-%M-%S")
[1] "2016-03-02-00-00-00"
库(lubridate)
x格式(x,“%Y-%m-%d-%H-%m-%S”)
[1] "2016-03-02-00-00-00"
从?楼层\u日期起
:
floor_date接受一个日期时间对象,并将其向下舍入到最近的值
指定时间单位的整数值
非常方便。这是一个命令,但您希望作为.POSIXlt()
:
只有在转换为POSIXct
时,时区偏移量才会进入UTC(我为六小时):
不用说,通过包装两者,您可以获得所需的类型和值:
再次以不需要lubridate或其他非基本R软件包的形式提交。否,
POSIXct
具有时区属性。它并不总是在UTC。只需注意使用as.POSIXct
的tz
参数。你是对的,但我不是这么说的。显然,自1970年1月1日(UTC时区)以来,内部表示以秒为单位。这难道不意味着新一天的开始时间是UTC的00:00:00吗?这可以解释Lasse的观察结果。编辑了我的原始答案并删除了大部分UTC参考,因为根本问题似乎是Sys.Date()与as.POSIXct结合,而不是UTC。从Date
到POSIXct
的转换是通过POSIXlt
完成的。试试as.POSIXct(as.POSIXlt(Sys.Date(),tz=“EET”),tz=“EET”)
。你说得对。但是,最里面的时区是不必要的,因为Sys.Date()以某种方式覆盖了timezone.added tz,只是为了澄清一点,它们不是问题所在。问题是R计算的是前一天的00:00:00,而不是当前。
library(lubridate)
x <- floor_date(Sys.Date(),"day")
> format(x,"%Y-%m-%d-%H-%M-%S")
[1] "2016-03-02-00-00-00"
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>
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>