【问题标题】:Weird POSIXct error奇怪的 POSIXct 错误
【发布时间】:2013-05-29 18:43:43
【问题描述】:

出于某种原因,as.POSIXct"2013-03-10 02:00:00.000" 解释为不同于该格式的其他有效日期时间。

> as.POSIXct("2013-03-10 01:00:00.000") #Different time, same date
[1] "2013-03-10 01:00:00 PST"

> as.POSIXct("2013-03-11 02:00:00.000") #Same time, different date
[1] "2013-03-11 02:00:00 PDT"

> as.POSIXct("2013-03-10 02:00:00.000")
[1] "2013-03-10 PST"

我正在使用包RODBC 从数据库中读取它,它会自动将整列日期时间转换为POSIXct 类。这会导致整个列丢失时间信息。

【问题讨论】:

  • 夏令时时移??? 2013-03-10 的凌晨 2 点在那个时区不存在吗?
  • @BenBolker 是对的。当天凌晨 2 点不存在。
  • 当然——这可以解释从 PST 到 PDT 的转变。我想如果不更改 RODBC 包的代码或更改数据库中的值,就没有简单的方法吗?
  • @SeñorO:这很容易通过Sys.setenv(TZ="GMT") 解决。
  • @MatthewPlourde:不,尽管他的机器是 PST,但 OP 认为数据库中的数据是 GMT 格式;并且您无法在 RODBC 调用中设置时区,因此您可以通过将 R 的时区设置为 GMT 来解决该问题。

标签: r posixct


【解决方案1】:

这是夏令时问题:显然 2013 年 3 月 10 日凌晨 2 点在该时区不存在。尽管如此,as.POSIXct 没有抱怨,而是默默地返回了一个有点奇怪的答案,这有点有趣(至少对我来说)。一个问题可能是 R 通常使用系统库来处理其中的一些内容,而底层库也是如此……

整合来自 cmets 的有用信息:@JoshUlrich 指出,您可以在导入数据之前使用Sys.setenv(TZ="GMT") 来解决这个问题(前提是原始数据确实是格林威治标准时间),因为@ 987654323@ 使用系统级时区,而不是允许您指定它...

【讨论】:

  • ...但我在 Win32 (R-2.15.2) 和 Ubuntu 64 (R-3.0.1) 上得到相同的行为。我发誓这曾经返回NA
  • 夏令时是个问题,Sys.setenv(TZ="GMT") 是一个简单的解决方法。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-12-06
  • 1970-01-01
  • 2010-11-17
  • 1970-01-01
  • 2014-10-11
  • 2012-04-27
  • 2013-10-30
相关资源
最近更新 更多