【问题标题】:R error: unknown timezone with as.POSIXct()R 错误:带有 as.POSIXct() 的未知时区
【发布时间】:2017-11-15 17:48:34
【问题描述】:

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

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

如果我跑了

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

R 返回 “2015-10-20 09:22:10 BST” 警告信息: 1:在 as.POSIXlt.POSIXct(x, tz) 中:未知时区 'default/Europe/London' 2: 在 as.POSIXlt.POSIXct(x, tz) : unknown timezone 'default/Europe/London'

我已尝试指定 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'

我已经按照Joshua Ulrich's post 查找了 zoneinfo/zone.tab,并且 zone.tab 文件中确实出现了“Europe/London”,而“BST”没有出现。所以我认为欧洲/伦敦应该是一个有效的 tz 选项。这是正确的吗?

是否有人对我收到警告的原因以及未将指定时区分配给 as.POSIXct 对象的原因提出建议?

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

在此先感谢

鸢尾花

【问题讨论】:

  • 很奇怪,当我运行您的命令时,我没有收到任何警告消息。我正在使用 R 3.4.1。
  • R-3.3.1,没有警告。
  • R-3.4.2 如果我尝试将时区更改为“BST”,我会收到相同的警告。当我将时区更改为“mytime”时,我也会收到同样的警告。如果我在 this list that the tz is based on 上使用其他任何东西,即使它们已被弃用,我也没有问题。我认为 BST 不是一个选项? 我使用Sys.setenv(TZ='MST') 来设置tz。
  • 我正在使用 R-3.2.0 - 在完成当前项目之前不愿意升级
  • 我正在运行 MacOS High Sierra,R-3.4.2 出现此问题,但升级到 R-3.4.3 后没有问题

标签: r datetime


【解决方案1】:

我在 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'

如果我将环境变量设置为我的时区,并且我用正确的时区返回日期,警告就会消失。

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

所以,每次我需要对日期做一些事情时,我都会设置环境变量。

但是,我发现 this link 在谈论同样的事情。 R Core Team 的 Peter Dalgaard 回复说这是 macOS 10.13 Beta 中的一个错误,由 Apple 来解决。

我正在考虑将Sys.setenv(TZ = "Pacific/Auckland") 放入.Rprofile,以便在我每次启动 RStudio 时设置时区。我希望这会有所帮助。

这是一个link,如果您想尝试我提到的.Rprofile 方法,它可能会很有用。

更新:这似乎已在 R 3.4.3 中得到解决。您可以在R news 中阅读更多相关信息。以下是发行说明的相关部分。

在 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"

【讨论】:

  • 加 1 用于更新。最简单的解决方案是升级到 R 3.4.3(或更高版本)
【解决方案2】:

看起来您确实需要使用时区更新您的系统,即使它没有被使用。

我似乎无法将我的时区设置为NA,但如果我使用Sys.setenv(TZ='Twilight Zone') 或任何不在the tz list 上的东西设置我的环境,我也会遇到与您相同的错误.

【讨论】:

  • 谢谢!我设置了 Sys.setenv(TZ="Europe/London") 并且所有警告都消失了。
  • 虽然它仍然在 as.POSIXct 对分配对象中的“BST”的调用中强制“欧洲/伦敦”
  • 它也为我做了。看来节省时间开关正在内部处理,我们不能强制时区只是其阶段之一。如果您从夏令时更改回来后进入某个时间点,您将获得列为 GMT 的时区。例如:t&lt;-as.POSIXct(1445929330, tz="Europe/London", origin="1970-01-01")
【解决方案3】:

查看输出它实际上并没有给出关于“欧洲/伦敦”的警告,只是关于其他变体(“BST”和“默认/欧洲/伦敦”)。

会不会是之前的命令的错误仍然挥之不去?如果再次运行as.POSIXct(1445329330, tz="Europe/London", origin="1970-01-01"),甚至重新启动 R,你会得到相同的结果吗?

即使使用正确的时区,我仍然会收到有关 BST 的错误

> as.POSIXct(1445329330, tz="BST", origin="1970-01-01")
[1] "2015-10-20 08:22:10 GMT"
Warning message:
In as.POSIXlt.POSIXct(x, tz) : unknown timezone 'BST'
> as.POSIXct(1445329330, tz="Europe/London", origin="1970-01-01")
[1] "2015-10-20 09:22:10 BST"
Warning message:
In as.POSIXlt.POSIXct(x, tz) : unknown timezone 'BST'

【讨论】:

  • 我确实重新启动了 R 并重新运行了命令,但错误仍然存​​在
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多