【发布时间】:2017-12-15 12:56:38
【问题描述】:
我在 RPostgreSQL 中处理日期时间时遇到问题。具体来说,它与在上传到 postgres 数据库期间自动调整为夏令时的 UTC 时区的 POSIXct 对象有关。一个简单的例子:
library(RPostgreSQL)
example = data.frame(date=as.POSIXct('2016-08-14 15:50:00',tz='UTC'))
con = dbConnect(dbDriver("PostgreSQL"),
dbname="mydb",
host="localhost",
port="5432",
user="me",
password="password")
dbWriteTable(con,name=c('myschema','mytable'),example,overwrite=T)
example2 = dbReadTable(con,name=c('myschema','mytable'))
dbDisconnect(con)
example2 # 2016-08-14 14:50:00
在这种情况下,时间导出为 15:50,但读回为 14:50,这表明已应用英国夏令时夏令时。我尝试将系统设置调整为 UTC,使用 Sys.setenv(TZ='UTC') 将 R 中的时区设置为 UTC,并使用 SET timezone TO 'UTC' 将 Postgres 中的时区设置为 UTC,但均无济于事。
有谁知道转换可能发生在过程中的哪个位置以及 dbWriteTable 的时区来自何处?对其他可能需要调整的设置有什么建议吗?
【问题讨论】: