如何在POSIXct中获得一天的开始

Tho*_*rst 3 timezone r 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(Sys.Date(), tz = "CET")
"2016-03-01 01:00:00 CET"
Run Code Online (Sandbox Code Playgroud)

这是不正确的 - 但还有其他方法吗?

我知道我可以用简单的方式破解我的出路

as.POSIXct(paste(Sys.Date(), "00:00:00", sep = " "), tz = "CET")
Run Code Online (Sandbox Code Playgroud)

但是必须有一个更正确的方法来做到这一点?基础R优先.

Dir*_*tel 7

这是一个单一命令---但你想要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> 
Run Code Online (Sandbox Code Playgroud)

只有当转换POSIXct发生时,UTC的时区偏移(对我来说是六个小时)才会进入:

R> as.POSIXct(Sys.Date())
[1] "2016-03-01 18:00:00 CST"
R> 
Run Code Online (Sandbox Code Playgroud)

不用说,通过包装你得到所需的类型价值:

R> as.POSIXct(as.POSIXlt(Sys.Date()))
[1] "2016-03-02 UTC"
R> 
Run Code Online (Sandbox Code Playgroud)

再次提交不需要润滑剂或其他非Base R包装.