R 转换为日期并使用秘鲁时区

R 转换为日期并使用秘鲁时区,r,postgresql,dplyr,R,Postgresql,Dplyr,我有一个从SQL查询中检索到的数据框(数据环): loid_last last_modified_date LIB3149 2020-05-29 19:10:13 我只想提取日期。所以我尝试了这种转换: data_loid <- data_loid %>% mutate(loid_creation_date = as.Date(last_modified_date)) data_loid <- data_loid %>% mutate(loan

我有一个从SQL查询中检索到的数据框(数据环):

loid_last   last_modified_date
LIB3149     2020-05-29 19:10:13
我只想提取日期。所以我尝试了这种转换:

data_loid <- data_loid %>% 
  mutate(loid_creation_date = as.Date(last_modified_date))
data_loid <- data_loid %>% 
  mutate(loan_creation_date = as.Date(last_modified_date, tz = "PET"))
我怀疑这是因为时区(我必须使用秘鲁时区),我尝试直接从查询中检索,使用
SELECT loid\u last,last\u modified\u date,date(last\u modified\u date)loid\u creation\u date从loid\u last='LIB3149'
表中检索,但它返回我
2020-05-30
,而不是
2020-05-29

我尝试了这种转换:

data_loid <- data_loid %>% 
  mutate(loid_creation_date = as.Date(last_modified_date))
data_loid <- data_loid %>% 
  mutate(loan_creation_date = as.Date(last_modified_date, tz = "PET"))
数据冗余%
变更(贷款创建日期=截止日期(上次修改日期,tz=“PET”))

但它不起作用。非常感谢您的帮助。

通过向查询中添加以下代码解决了此问题:

--- Time zone is critical for this project
SET timezone = 'America/Lima';
SELECT loid_last, last_modified_date, 
date(last_modified_date) loid_creation_date 
FROM table 
WHERE loid_last = 'LIB3149';

在这之后,使用R可以轻松地进行检索,并且日期是正确的。

在R中进行SQL查询之后,
last\u modified\u date
是什么类型的列?
?时区
的文档可能会有所帮助
“PET”
不被识别,但
作为.POSIXct(“2020-05-29 19:10:13”,tz=“America/Lima”)
工作(因此
作为.Date
也是如此)。
timestamptz
是一种pg列类型,当它是R数据帧时,是否将其转换为
字符
POSIXct
?了解这一点将有助于在使用
as.Date()时使用哪些方法。使用@r2evans指出的无效时区可能是本文的根本问题,因此,当您将
tz=“PET”
替换为
tz=“America/Lima”
时会发生什么?尝试使用R不识别的时区肯定会导致不可靠/不可接受的结果。在这种情况下,应该清楚的是,
“PET”
是不可识别的,因此您需要学习如何找到R可以识别的时区,即在
OlsonNames()
中找到的时区(这是一个loooooong向量,推荐
head(OlsonNames())
,以便快速浏览)。我事先不知道有哪些区域可用,所以我做了
grep(“秘鲁利马”,OlsonNames(),value=TRUE)
来找到一些看起来可信的东西。