【问题标题】:Why as.POSIXct return NA for some date-time that should be correct? [duplicate]为什么 as.POSIXct 返回 NA 对于某些应该正确的日期时间? [复制]
【发布时间】:2015-09-25 04:53:29
【问题描述】:

您好,我的数据和格式似乎是正确的,但有时它只是不起作用。这是一个希望可重现的示例:

df = data.frame(t = c("2011-05-26 17:40:43", "2014-03-09 02:34:54"))
df
#                     t
# 1 2011-05-26 17:40:43
# 2 2014-03-09 02:34:54
df$t = strptime(df$t, '%Y-%m-%d %H:%M:%S') 
df
#                     t
# 1 2011-05-26 17:40:43
# 2 2014-03-09 02:34:54
df$t = as.POSIXct(df$t)
df
#                     t
# 1 2011-05-26 17:40:43
# 2                <NA>

感谢任何帮助。


更新:应该与夏令时有关。我用 DST 的其他日期进行了测试

df = data.frame(t = c("2011-05-26 17:40:43", "2013-03-10 02:34:54", "2014-03-09 02:34:54", "2015-03-08 02:34:54"))
df
#                     t
# 1 2011-05-26 17:40:43
# 2 2013-03-10 02:34:54
# 3 2014-03-09 02:34:54
# 4 2015-03-08 02:34:54
df$t = strptime(df$t, '%Y-%m-%d %H:%M:%S') 
df
#                     t
# 1 2011-05-26 17:40:43
# 2 2013-03-10 02:34:54
# 3 2014-03-09 02:34:54
# 4 2015-03-08 02:34:54
df$t = as.POSIXct(df$t)
df
#                     t
# 1 2011-05-26 17:40:43
# 2                <NA>
# 3                <NA>
# 4                <NA>

【问题讨论】:

  • 我无法在 Linux 上运行的 R 版本 3.2.2 上复制。
  • 我也不能在 3.2.1 上。您可能需要重新启动 R 会话并查看问题是否消失。
  • 谢谢大家~我在windows中使用的是3.2.1,已经重启了R几次...
  • 碰巧,您所在的时区有夏令时吗?它发生在 2014 年 3 月 9 日吗?
  • 嘿@Pascal!是的,那天是夏令时!我用其他 DST 天测试过,他们都有这个问题

标签: r datetime


【解决方案1】:

如果由于 DST 时间更改而导致您的时区不存在时间,这或多或少是预期的行为,正如 strptime 的帮助所说。

请记住,在大多数时区,有些时间不会出现,有些时间会出现两次,因为转换到/从“夏令时”(也称为“夏季”)时间。 strptime 不验证这样的时间(它不假定特定的时区),但 as.POSIXct 的转换会这样做。通过 strftime 和格式化/打印进行转换使用 OS 工具,并且可能会在 DST 转换时返回不存在时间的无意义结果。

由于 strptime 使用系统库,因此预期结果在 Linux 和 Windows 上也会有所不同。

根据我使用 lubridate 等库的经验,会产生更可预测的结果。

【讨论】:

    猜你喜欢
    • 2021-05-17
    • 1970-01-01
    • 2020-11-07
    • 1970-01-01
    • 2020-11-29
    • 2019-08-18
    • 1970-01-01
    • 2018-03-10
    • 1970-01-01
    相关资源
    最近更新 更多