4

我想相对于特定时区将 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不采用时区参数。

4

1 回答 1

7

round一旦过了中午,就会轮到第二天,这就是为什么我认为你会看到 2013-03-06。我还必须tz在调用中明确设置参数as.POSIXct

观察:

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"

如果您想将那天的任何时间四舍五入到那一天,也许您想要的是trunc

format(trunc( as.POSIXct("2013-03-05 12:00:00" , tz = "EST" ), "day" ))
[1] "2013-03-05"
于 2013-04-16T15:44:22.257 回答