我试图使用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
提前谢谢了
鸢尾花
我在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)