我需要在动物园对象的索引上使用as.Date。有些日期是在BST,所以转换时我只会(仅)输入这些条目。我不关心一小时的差异,甚至不关心日期的时间部分,我只是想确保显示的日期保持不变。我猜这不是很难,但我无法管理它。有人可以帮忙吗?
class(xtsRet)
#[1] "xts" "zoo"
index(xtsRet)
#[1] "2007-07-31 BST" "2007-08-31 BST" "2007-09-30 BST" "2007-10-31 GMT"
class(index(xtsRet))
#[1] "POSIXt" "POSIXct"
index(xtsRet) <- as.Date(index(xtsRet))
index(xtsRet)
#[1] "2007-07-30" "2007-08-30" "2007-09-29" "2007-10-31"
最简单的可重复示例(不需要zoo
包):
my_date <- as.POSIXct("2007-04-01") # Users in non-UK timezone will need to
# do as.POSIXct("2007-04-01", "Europe/London")
my_date
#[1] "2017-04-01 BST"
as.Date(my_date)
#[1] "2017-03-31"
答案 0 :(得分:4)
假设我们有这样的样本数据:
library(zoo)
x <- as.POSIXct("2000-01-01", tz = "GMT")
然后看看是否有你想要的东西:
# use current time zone
as.Date(as.character(x, tz = ""))
# use GMT
as.Date(as.character(x, tz = "GMT"))
# set entire session to GMT
Sys.setenv(TZ = "GMT")
as.Date(x)
同时尝试使用"BST"
代替"GMT"
,并在R News 4/1中注明有关日期和时间的文章。
答案 1 :(得分:3)
您可以偏移POSIX
个对象,使其不在午夜左右。 1小时(3600秒)应该足够了:
d <- as.POSIXct(c("2007-07-31","2007-08-31","2007-09-30","2007-10-31"))
d
[1] "2007-07-31 BST" "2007-08-31 BST" "2007-09-30 BST" "2007-10-31 GMT"
as.Date(d)
[1] "2007-07-30" "2007-08-30" "2007-09-29" "2007-10-31"
as.Date(d+3600)
[1] "2007-07-31" "2007-08-31" "2007-09-30" "2007-10-31"
答案 2 :(得分:1)
我建议使用as.POSIXlt转换为日期对象,包装为as.Date:
d <- as.POSIXct(c("2007-07-31","2007-08-31","2007-09-30","2007-10-31"))
d
[1] "2007-07-31 BST" "2007-08-31 BST" "2007-09-30 BST" "2007-10-31 GMT"
as.Date(as.POSIXlt(d))
[1] "2007-07-31" "2007-08-31" "2007-09-30" "2007-10-31"
达到与上述+3600相同的功能,但hack少一些