由于我无法解决的原因,我收到了带有奇数时区的 R 数据。
我希望测试数据集中的最新日期是否等于给定日期(例如当前日期),但是我遇到了(不需要的)时区转换问题。是否有一种自然的方法来测试两个日期字符串是否相同,即使时区不同?我不一定知道数据的时区。
我遇到了两个“解决方案”,但是两者似乎都是低效(和限制)的黑客:
substr(as.character(last(odd_data$date)), 1, 10) == substr(as.character(Sys.Date()), 1, 10)
和
lastDate <- as.POSIXlt(last(odd_data$date))
as.Date(paste0(lastDate$year + 1900, "-", lastDate$mon + 1, "-", lastDate$mday)) == Sys.Date()
两者都让我得到了我需要的答案,但我觉得我正在反对这种语言。
我想回答的问题是:如果不同时区的人写下进行实验的日期,它是否与我提供的日期相同(示例代码是Sys.Date()
)?
--
消歧-假设我有这两个日期:
> date.Syd <- as.POSIXct("2012-12-11 08:30:01", tz = 'Australia/Sydney')
> date.Syd
[1] "2012-12-11 08:30:01 EST"
> date.Ldn <- as.POSIXct("2012-12-11 23:00:11", tz = 'GMT')
> date.Ldn
[1] "2012-12-11 23:00:11 GMT"
在哪里:
> as.Date(date.Syd)
[1] "2012-12-10"
> unclass(date.Syd)
[1] 1355175001
attr(,"tzone")
[1] "Australia/Sydney"
> as.Date(date.Ldn)
[1] "2012-12-11"
> unclass(date.Ldn)
[1] 1355266811
attr(,"tzone")
[1] "GMT"
在这种情况下,由于时区转换,日期相等性测试失败(不受欢迎):
> as.Date(date.Syd) == as.Date(date.Ldn)
[1] FALSE
这就是为什么我使用我丑陋的角色/POSIXlt hacks:
> substr(as.character(date.Syd), 1,10) == substr(as.character(date.Ldn), 1,10)
[1] TRUE
和
> date.Syd_lt <- as.POSIXlt(date.Syd)
> date.Ldn_lt <- as.POSIXlt(date.Ldn)
> paste0(date.Syd_lt$year + 1900, "-", date.Syd_lt$mon + 1, "-", date.Syd_lt$mday) ==
+ paste0(date.Ldn_lt$year + 1900, "-", date.Ldn_lt$mon + 1, "-", date.Ldn_lt$mday)
[1] TRUE