as.POSIXlt.POSIXct(x,tz)出错:(从警告转换)未知时区'GMT'

时间:2017-02-09 17:37:13

标签: r lubridate

我发现自己遇到了一个问题,我无法找到解决方案的线索 - 这使得实际处理它变得非常困难。这里是:在R(使用R-Studio)我尝试创建一个库lubridate的日期对象:

library(lubridate)
ymd(20161001)

会导致错误:

  

as.POSIXlt.POSIXct(x,tz)出错:         (从警告转换)未知时区'GMT'

最后一个命令的第二次运行(以及任何后续运行)产生正确的结果:

ymd(20161001)
[1] "2016-01-01"

直到我重新启动R会话,第一次运行时再次触发错误。我检查了几个设置,但是从第一次运行到第二次运行时找不到更改的任何内容。例如,这是我的sessionInfo()

的输出
R version 3.3.2 (2016-10-31)
Platform: x86_64-w64-mingw32/x64 (64-bit)
Running under: Windows 7 x64 (build 7601) Service Pack 1

locale:
[1] LC_COLLATE=Dutch_Netherlands.1252  LC_CTYPE=Dutch_Netherlands.1252    LC_MONETARY=Dutch_Netherlands.1252 LC_NUMERIC=C                      
[5] LC_TIME=Dutch_Netherlands.1252    

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base     

other attached packages:
[1] lubridate_1.6.0

loaded via a namespace (and not attached):
[1] magrittr_1.5  tools_3.3.2   stringi_1.1.2 stringr_1.1.0

Sys.timezone()[1] "Europe/Berlin"Sys.getenv('TZ')为空:""

我确实发现其他人遇到同样的警告,例如this blogposthere,但这些问题与有关,而我宁愿忽略时间完全,只处理日期

3 个答案:

答案 0 :(得分:0)

今天我收到同样的错误。我的代码在一个Rmarkdown文件集中输出为tufte_html文档。我正在加载以下包:

library(lubridate)
library(tidyverse)
library(stringr)
library(extrafont)
library(extrafontdb)
library(tufte)

为了让我的代码正常工作,我做了以下事情: 首先,我离开了公司的VPN,怀疑这可能是问题所在,但是在使用家庭wifi和没有VPN时我仍然遇到错误。接下来,我更新了所有包,但仍然收到错误。 然后,我关闭了我的Macbook并重新启动但仍然收到错误。 最后,我将我的脚本更改为不再加载整个tidyverse,而是加载:

library(lubridate)
library(tibble)
library(dplyr)
library(readr)
library(extrafont)
library(extrafontdb)
library(tufte)

然后我的Rmarkdown文件呈现为html而没有未知的时区错误。不幸的是,我无法确定究竟是什么确切地修复了错误或为什么加载部件而不是整个tidyverse似乎为我做了诀窍。你有没有解决过你的问题?

我的会话信息有效:

R version 3.4.2 (2017-09-28)
Platform: x86_64-apple-darwin15.6.0 (64-bit)
Running under: macOS High Sierra 10.13.1

Matrix products: default
BLAS: /System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/libBLAS.dylib
LAPACK: /Library/Frameworks/R.framework/Versions/3.4/Resources/lib/libRlapack.dylib

locale:
[1] en_US.UTF-8/en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/en_US.UTF-8

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base     

other attached packages:
[1] tufte_0.2       extrafontdb_1.0 extrafont_0.17  stringr_1.2.0  
[5] readr_1.1.1     dplyr_0.7.4     tibble_1.3.4    lubridate_1.7.1

loaded via a namespace (and not attached):
 [1] Rcpp_0.12.13     Rttf2pt1_1.3.4   knitr_1.17       bindr_0.1       
 [5] magrittr_1.5     hms_0.3          R6_2.2.2         rlang_0.1.4     
 [9] tools_3.4.2      htmltools_0.3.6  yaml_2.1.14      rprojroot_1.2   
[13] digest_0.6.12    assertthat_0.2.0 bindrcpp_0.2     glue_1.2.0      
[17] evaluate_0.10.1  rmarkdown_1.8    stringi_1.1.6    compiler_3.4.2  
[21] backports_1.1.1  pkgconfig_2.0.1

答案 1 :(得分:0)

this question的答案对我有用。

例如,我在我的脚本中添加了Sys.setenv(TZ='America/Detroit')

答案 2 :(得分:0)

此处提供的解决方案R error: unknown timezone with as.POSIXct()

就我而言,在代码开头包含Sys.setenv(TZ =“America / Lima”)后,一切正常。 请查看https://en.wikipedia.org/wiki/List_of_tz_database_time_zones

处的有效TZ值列表