lubridate:明天具体时间?

lubridate: tomorrow at specific time?

我需要创建一个代表明天早上 6 点(当地时间)的 POSIXt 对象。 我想到的最好的 lubridate 表达式是这样的:

lubridate::floor_date(lubridate::now() + lubridate::days(1), "day") + lubridate::hours(6))

这感觉有点笨拙 ("now + 1 day -> truncate to the nearest day -> + 6 hours")。 有更好的方法吗?

你可以

Sys.Date() + 1 + lubridate::hours(6)
#[1] "2020-01-08 06:00:00 UTC"

这在我的时区 (CET) 对我有用:

library(lubridate)
ceiling_date(now(), "day") + hours(6)
floor_date(now(), "day") + hours(30)

两者都return

[1] "2020-01-08 06:00:00 CET"

编辑:这也有效:

library(lubridate)
`tz<-`(today() + hours(30), "")
`tz<-`(Sys.Date() + hours(30), "")

两者都 return(在我当地的时区)

[1] "2020-01-08 06:00:00 CET"

(解释如下)

附录

有趣的是, using Sys.Date() as well as 使用 lubridate::today() 将时区切换为 UTC:

Sys.Date() + 1 + lubridate::hours(6)
[1] "2020-01-08 06:00:00 UTC"
library(lubridate)
today() + hours(30)
[1] "2020-01-08 06:00:00 UTC"

符合OP当地时间.

的要求

显然,这在从 Date 强制到 POSIXct class:

时偷偷摸摸

lubridate::hours() return 一个 Period 对象。将 Period 对象添加到 Date 对象时,似乎 lubridate::as_datetime() 被用于强制转换。 as_datetime() 使用 "UTC" 作为默认时区。之后可以设置时区,例如,

`tz<-`(today() + hours(30), "")