将字符串转换为日期时间时获取 NA 而不是日期时间

Getting NA instead of datetime when converting string to datetime

5 人投票决定关闭此 post,但由于它有答案,该网站警告不要将其完全删除。

为了让这对未来的读者尽可能有用 - 如果您在进行字符串到日期时间的转换时犯了语法错误,您收到的警告和错误(如果有的话)可能不会指出错误的原因问题。相反,您的输出将替换为 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")

有一个 post 建议其他人因其他原因遇到 NA 错误:

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

在这种情况下:查看有关日期字符串格式化程序的文档可以避免这个问题,但在制作 post 时,我没有意识到这一点。解决问题的关键是了解哪里出了问题,并在正确的地方寻找问题所在。正确设置格式化程序的工作代码的一个很好的例子是这个问题的公认答案。

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

  1. 使用ymd,意思是年月日。相反,使用 mdy 表示 月-日-年
  2. 使用 hms 小时-分钟-秒,但不提供秒数。

尝试

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