将POSIX日期和时间(posixct)舍入到相对于时区的日期

时间:2013-04-16 15:31:16

标签: r date rounding posixct

我希望将POSIXct舍入到相对于特定时区的那一天。

如果我尝试

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

返回

2013-03-06

这是有道理的,因为当它在EST5EDT的2013-03-05美国东部时间23:00:00时,它已经是2013-03-06 UTC。从逻辑上讲,我想做的是:

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

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

1 个答案:

答案 0 :(得分: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"