R错误:带有as.POSIXct()的未知时区

Iri*_*ren 2 datetime r

我试图使用as.POSIXct()将unix纪元时间戳转换为日期时间对象

当我调用as.POSIXct()时,我需要指定时区(欧洲/伦敦或UTC).

如果我跑

> t<-as.POSIXct(1445329330, tz="Europe/London", origin="1970-01-01")
> t
Run Code Online (Sandbox Code Playgroud)

R返回"2015-10-20 09:22:10 BST"警告信息:1:在as.POSIXlt.POSIXct(x,tz):未知时区'默认/欧洲/伦敦'2:在as.POSIXlt.POSIXct( x,tz):未知时区'默认/欧洲/伦敦'

我已经尝试指定tz ="BST",但这也会返回警告

Warning messages:
1: In as.POSIXlt.POSIXct(x, tz) : unknown timezone 'BST
          '
2: In as.POSIXlt.POSIXct(x, tz) : unknown timezone 'default/Europe/London'
3: In as.POSIXlt.POSIXct(x, tz) : unknown timezone 'BST
          '
4: In as.POSIXlt.POSIXct(x, tz) : unknown timezone 'default/Europe/London'
Run Code Online (Sandbox Code Playgroud)

我根据Joshua Ulrich的帖子查找了zoneinfo/zone.tab,并且"Europe/London"确实出现在zone.tab文件中,而"BST"没有.所以我认为欧洲/伦敦应该是一个有效的tz选择.它是否正确?

有没有人有关于为什么我收到警告的建议,以及为什么没有将指定的时区分配给as.POSIXct对象?

应该注意的是,在将MacOS更新为High Sierra之前,调用as.POSIXct()的脚本在没有警告的情况下运行.操作系统更新是否会导致这些警告?当我运行Sys.timezone()时,它返回NA

提前谢谢了

鸢尾花

Mus*_*lli 7

我在macOS High Sierra 10.13.1上遇到了类似的问题.一旦我尝试对日期做任何事情,我得到以下错误.

> as.POSIXct("2017-10-01", format = "%Y-%m-%d")
[1] "2017-10-01 GMT"
Warning message:
In strptime(x, format, tz = tz) :
  unknown timezone 'zone/tz/2017c.1.0/zoneinfo/Pacific/Auckland'
Run Code Online (Sandbox Code Playgroud)

如果我将环境变量设置为我的时区并且使用正确的时区获取日期,则警告消失.

> Sys.setenv(TZ = "Pacific/Auckland")
> as.POSIXct("2017-10-01")
[1] "2017-10-01 NZDT"
Run Code Online (Sandbox Code Playgroud)

所以,每次我需要做一些与日期有关的事情时,我一直在设置环境变量.

但是,我发现这个链接谈论同样的事情.来自R Core Team的Peter Dalgaard已经回复说这是macOS 10.13 Beta中的一个错误,并且由Apple来解决它.

我想放Sys.setenv(TZ = "Pacific/Auckland").Rprofile,使其将时区设置每次启动RStudio时间.我希望这有帮助.

如果您想尝试我提到的方法,这是一个可能有用的链接.Rprofile.

更新:似乎在R 3.4.3中已经解决了这个问题.您可以在 R新闻中阅读更多相关信息.以下是发行说明的相关部分.

在UNIX-ALIKE上安装

已经为macOS 10.13'High Sierra'中的时区文件位置的更改添加了一种解决方法,并再次在10.13.1中,因此当R配置为--with-时,系统设置正确推断出默认时区internal-tzcode(macOS上的默认值).

我可以确认新版本的R解决了日期/时间对象的问题.

> Sys.timezone()
[1] "Pacific/Auckland"
> Sys.time()
[1] "2017-12-30 16:22:32 NZDT"
Run Code Online (Sandbox Code Playgroud)