【问题标题】:r Check if Sys.time() is in a given interval of hours of the dayr 检查 Sys.time() 是否在一天中的给定时间间隔内
【发布时间】:2020-05-20 19:49:24
【问题描述】:

我正在寻找一个可能不那么老套的解决方案,这里有 lubridate(类似的东西)。

用例:我想检查 Sys.time() 是否在 小时 的给定间隔之间,这比我想象的要复杂一点 b/c a @987654322 @ 似乎总是需要一个日期,例如paste("01-01-01", "9:00 AM")

这就是我所做的检查Sys.time() 是否在工作时间之间。我正在提取小时的数值并进行比较,这对我来说似乎很老套:)

as.numeric(format(lubridate::as_datetime(Sys.time(), tz = "America/New_York"), format = "%H")) >= as.numeric(format(ymd_hm(paste("01-01-01", "9:00 AM"), tz = "America/New_York"), format = "%H")) &

as.numeric(format(lubridate::as_datetime(Sys.time(), tz = "America/New_York"), format = "%H")) < as.numeric(format(ymd_hm(paste("01-01-01", "6:00 PM"), tz = "America/New_York"), format = "%H"))

这有效并根据设置的参数返回TRUEFALSE。同样,我正在寻找一个更优雅的解决方案来解决这个怪物,或者这可能会帮助那些正在寻找这个的人。

欢迎任何反馈!

【问题讨论】:

    标签: r datetime lubridate


    【解决方案1】:

    您可以使用hour。 LHS 和 RHS 上相同的 tz= 相互抵消。

    hour(Sys.time()) %in% 9:18 
    # [1] FALSE
    

    【讨论】:

    • 非常感谢 - 是的,这更干净了!我进行了一项更改,在Sys.time() 端包含tz = ,因为我正在使用UTC 的服务器上运行脚本; as.numeric(format(lubridate::as_datetime(Sys.time(), tz = "America/New_York"), format = "%H")) %in% 9:18
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-06-17
    • 1970-01-01
    • 2021-06-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-26
    相关资源
    最近更新 更多