为什么as.POSIXct返回NA的某些日期时间应该是正确的?

时间:2015-09-25 04:53:30

标签: r datetime

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

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相关。我测试了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>

1 个答案:

答案 0 :(得分:1)

如果由于DST时间更改而在您的时区中不存在时间,则strptime的帮助表明,这或多或少是预期的行为。

  

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

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

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