Lubridate round_date() 似乎在四舍五入到天时更改时区
Lubridate round_date() seems to change time zone when rounding to day
我正在尝试四舍五入(到当天)日期时间数据。数据如下所示:
> date[10:15]
[1] "2016-08-31 23:03:02 EDT" "2016-08-31 22:52:50 EDT"
[3] "2016-08-31 22:50:02 EDT" "2016-08-31 22:34:28 EDT"
[5] "2016-08-31 22:31:41 EDT" "2016-08-31 22:25:37 EDT"
问题是当我用lubridate
函数round_date()
把日期"round"变成只有年月日部分的时候,日期好像改成了UTC (注意:UTC 比 EDT 提前约 5 小时,所以 00:40:17 EDT
是 05:40:17 UTC
,如果我理解正确的话):
> date_r
[1] "2016-09-01 EDT" "2016-09-01 EDT" "2016-09-01 EDT"
[4] "2016-09-01 EDT" "2016-09-01 EDT" "2016-09-01 EDT"
这是一个代表:
structure(c(1472698982, 1472698370, 1472698202, 1472697268, 1472697101,
1472696737), class = c("POSIXct", "POSIXt"), tzone = "America/Detroit")
date_r <- round_date(date, unit = "day")
如果日期在美国东部时间包含 8-31
,我试图将四舍五入的日期设为 8-31
(而不是 9-1
)。四舍五入时如何保留时区?对非 Lubridate
答案开放。
您可以在基数 R
中使用 strptime
d = structure(c(1472698982, 1472698370, 1472698202, 1472697268, 1472697101,
1472696737), class = c("POSIXct", "POSIXt"), tzone = "America/Detroit")
strptime(d, format = "%Y-%m-%d", tz = "America/Detroit")
#OR
#strptime(d, format = "%Y-%m-%d", tz = attr(d, "tzone"))
#[1] "2016-08-31 EDT" "2016-08-31 EDT" "2016-08-31 EDT"
#[4] "2016-08-31 EDT" "2016-08-31 EDT" "2016-08-31 EDT"
或使用 floor_date
或 lubridate
library(lubridate)
floor_date(d, unit = "day")
#[1] "2016-08-31 EDT" "2016-08-31 EDT" "2016-08-31 EDT"
#[4] "2016-08-31 EDT" "2016-08-31 EDT" "2016-08-31 EDT"
我正在尝试四舍五入(到当天)日期时间数据。数据如下所示:
> date[10:15]
[1] "2016-08-31 23:03:02 EDT" "2016-08-31 22:52:50 EDT"
[3] "2016-08-31 22:50:02 EDT" "2016-08-31 22:34:28 EDT"
[5] "2016-08-31 22:31:41 EDT" "2016-08-31 22:25:37 EDT"
问题是当我用lubridate
函数round_date()
把日期"round"变成只有年月日部分的时候,日期好像改成了UTC (注意:UTC 比 EDT 提前约 5 小时,所以 00:40:17 EDT
是 05:40:17 UTC
,如果我理解正确的话):
> date_r
[1] "2016-09-01 EDT" "2016-09-01 EDT" "2016-09-01 EDT"
[4] "2016-09-01 EDT" "2016-09-01 EDT" "2016-09-01 EDT"
这是一个代表:
structure(c(1472698982, 1472698370, 1472698202, 1472697268, 1472697101,
1472696737), class = c("POSIXct", "POSIXt"), tzone = "America/Detroit")
date_r <- round_date(date, unit = "day")
如果日期在美国东部时间包含 8-31
,我试图将四舍五入的日期设为 8-31
(而不是 9-1
)。四舍五入时如何保留时区?对非 Lubridate
答案开放。
您可以在基数 R
中使用strptime
d = structure(c(1472698982, 1472698370, 1472698202, 1472697268, 1472697101,
1472696737), class = c("POSIXct", "POSIXt"), tzone = "America/Detroit")
strptime(d, format = "%Y-%m-%d", tz = "America/Detroit")
#OR
#strptime(d, format = "%Y-%m-%d", tz = attr(d, "tzone"))
#[1] "2016-08-31 EDT" "2016-08-31 EDT" "2016-08-31 EDT"
#[4] "2016-08-31 EDT" "2016-08-31 EDT" "2016-08-31 EDT"
或使用 floor_date
或 lubridate
library(lubridate)
floor_date(d, unit = "day")
#[1] "2016-08-31 EDT" "2016-08-31 EDT" "2016-08-31 EDT"
#[4] "2016-08-31 EDT" "2016-08-31 EDT" "2016-08-31 EDT"