【问题标题】:Round a POSIX date and time (posixct) to a date relative to a timezone将 POSIX 日期和时间 (posixct) 舍入为相对于时区的日期
【发布时间】:2013-04-09 02:19:42
【问题描述】:

我想将 POSIXct 舍入到相对于特定时区的日期。

如果我尝试

round(as.POSIXct("2013-03-05 23:00:00 EST"), "day")

返回

2013-03-06

这是有道理的,因为当 EST5EDT 的 2013 年 3 月 5 日美国东部标准时间 23:00:00 时,UTC 时间已经是 2013 年 3 月 6 日。从逻辑上讲,我想做的是:

round(as.POSIXct("2013-03-05 23:00:00 EST"), "day", tz="EST5EDT")

即“将此日期和时间四舍五入到相对于 EST5EDT 时区最近的一天”。不幸的是,round 不采用时区参数。

【问题讨论】:

    标签: r date rounding posixct


    【解决方案1】:

    round 会在中午过后舍入到第二天,这就是为什么我认为您看到的是 2013-03-06。我还必须在对as.POSIXct 的调用中明确设置tz 参数

    观察:

    round( as.POSIXct("2013-03-05 11:00:00" , tz = "EST" ), "day" )
    [1] "2013-03-05 EST"
    

    然后过了中午:

    round( as.POSIXct("2013-03-05 12:00:00" , tz = "EST" ), "day" )
    [1] "2013-03-06 EST"
    

    format 的调用将日期提取为不带 tz 参数的字符串。因此,您可以在没有时区的情况下获得原始结果

    format( round( as.POSIXct("2013-03-05 12:00:00" , tz = "EST" ), "day" ) )
    [1] "2013-03-06"
    

    如果你想round在那一天到那一天的任何时间,也许你想要的是trunc

    format(trunc( as.POSIXct("2013-03-05 12:00:00" , tz = "EST" ), "day" ))
    [1] "2013-03-05"
    

    【讨论】:

      猜你喜欢
      • 2018-02-04
      • 2021-06-02
      • 2012-07-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-15
      • 2014-11-10
      相关资源
      最近更新 更多