我遇到与this question完全相反的问题。 sqldf
正在将日期从GMT / UTC转换为本地时间。我该如何防止这种行为?注意:我使用lubridate
包将日期字符串转换为POSIXct。
dates <- c("9/12/2010 0:25","9/12/2010 23:22","9/10/2010 1:55")
foo <- data.frame(dates=mdy_hm(dates))
返回
dates
1 2010-09-12 00:25:00
2 2010-09-12 23:22:00
3 2010-09-10 01:55:00
,而
bar <- sqldf("SELECT * FROM foo")
返回
dates
1 2010-09-11 19:25:00
2 2010-09-12 18:22:00
3 2010-09-09 20:55:00
答案 0 :(得分:1)
sqldf的帮助维基给出了如何处理日期的示例。您需要使用as将结果转换为数字。然后将结果提供给processMethod以将其转换为所需的格式。
这里是对你的例子的改编。
dates <- c("9/12/2010 0:25","9/12/2010 23:22","9/10/2010 1:55")
foo <- data.frame(dates=mdy_hm(dates))
processDates <- function(data, ...) {
ix <- grepl("_convert$", names(data))
names(data)[ix] <- sub("_convert$", "", names(data)[ix])
data[ix] <- lapply(data[ix], as.POSIXct,
origin = "1970-01-01",
tz='UTC')
data
}
sqldf("select dates as newdates_convert from foo", method = processDates)
newdates
1 2010-09-12 00:25:00
2 2010-09-12 23:22:00
3 2010-09-10 01:55:00