R:当我尝试格式化日期字符串时,为什么strptime总是返回NA?

时间:2011-07-13 20:14:17

标签: r date

这是我的一些数据,从文件名AttReport_all中读入:

Registration.Date                 Join.Time                Leave.Time
1 Jul 05, 2011 09:30 PM EDT Jul 07, 2011 01:05 PM EDT Jul 07, 2011 01:53 PM EDT
2 Jul 05, 2011 10:20 AM EDT Jul 07, 2011 01:04 PM EDT Jul 07, 2011 01:53 PM EDT
3 Jul 04, 2011 02:41 PM EDT Jul 07, 2011 12:49 PM EDT Jul 07, 2011 01:53 PM EDT
4 Jul 04, 2011 11:38 PM EDT Jul 07, 2011 12:49 PM EDT Jul 07, 2011 01:54 PM EDT
5 Jul 05, 2011 11:41 AM EDT Jul 07, 2011 12:54 PM EDT Jul 07, 2011 01:54 PM EDT
6 Jul 07, 2011 11:08 AM EDT Jul 07, 2011 01:16 PM EDT Jul 07, 2011 01:53 PM EDT

如果我strptime(AttReport_all$Registration.Date, "%b %m, %Y %H:%M %p", tz="")我得到了一系列我期待日期的NA。

Sys.setlocale("LC_TIME", "C")返回“C”

typeof(AttReport_all$Registration.Date)返回“整数”

is.factor(AttReport_all$Registration.Date)返回TRUE。

我错过了什么?

这是版本输出,如果它有帮助: 平台i386-pc-mingw32
arch i386
os mingw32
系统i386,mingw32
状态
专业2 未成年人13.0
2011年 月04日 第13天 svn rev 55427
语言R
version.string R版本2.13.0(2011-04-13)

1 个答案:

答案 0 :(得分:9)

strptime会在第一个参数上自动运行as.character(因此无关紧要)并且忽略format=中未指定的任何尾随字符(因此“EDT”没关系)。

唯一的问题是错误的@Ben Bolker确定(%m应该是%d)而%H应该是%I?strptime说你应该< em> not 将%H%p一起使用。

# %b and %m are both *month* formats
strptime("Jul 05, 2011 09:30 PM EDT", "%b %m, %Y %H:%M %p", tz="")
# [1] NA

# change %m to %d and we no longer get NA, but the time is wrong (AM, not PM)
strptime("Jul 05, 2011 09:30 PM EDT", "%b %d, %Y %H:%M %p", tz="")
# [1] "2011-07-05 09:30:00"

# use %I (not %H) with %p
strptime("Jul 05, 2011 09:30 PM EDT", "%b %d, %Y %I:%M %p", tz="")
# [1] "2011-07-05 21:30:00"