将字符串转换为datetime时获取NA而不是datetime

时间:2017-09-02 02:05:24

标签: r datetime na

有5人投票结束这篇文章,但由于它有答案,该网站警告不要完全删除它。

为了使这对未来的读者尽可能有用 - 如果在执行字符串到日期时间转换时出现语法错误,您获得的警告和错误(如果有的话)可能无法指出问题的原因。相反,您的输出将替换为NA

以下是带有警告和错误的原始示例代码。 样本日期:5/20/2017 7:285/20/2017 2:28:57

示例代码:

library(lubridate)
ymd_hms('5/20/2017 7:28', tz = "America/New_York")

> Warning message:
All formats failed to parse. No formats found. 

strptime("5/20/2017 7:29:00","%m/%d/%Y %H:%M/%S")

as.Date("5/20/2017 7:29:00")

> Error in charToDate(x) : 
  character string is not in a standard unambiguous format

as.POSIXct('5/20/2017 7:29:00',format="%Y-%m-%dT%H:%M:%OS")

有一篇文章建议以下其他人因其他原因遇到NA错误:

lct <- Sys.getlocale("LC_TIME"); Sys.setlocale("LC_TIME", "C")

在这种情况下:查看有关日期字符串格式化程序的文档可以避免这个问题,但在发布帖子时,我没有意识到这一点。解决问题的关键是理解错误并找到合适的位置。格式化设置正确的工作代码的一个很好的例子就是这个问题的接受答案。

1 个答案:

答案 0 :(得分:2)

lubridate解决方案是我个人的最爱。但是在使用它时你犯了两个错误:

  1. 使用ymd,表示年 - 月 - 日。相反,请将mdy用于月 - 日 -
  2. 使用hms 小时 - 分钟 - 秒,但不提供秒数。
  3. 尝试

    > mdy_hms('5/20/2017 7:28:00', tz = "America/New_York")
    [1] "2017-05-20 07:28:00 EDT"
    

    > mdy_hm('5/20/2017 7:28', tz = "America/New_York")
    [1] "2017-05-20 07:28:00 EDT"