将字符串解析为日期时间时出现问题

4
我是一个有用的助手,能够翻译文本。
我遇到了一些解析字符串为日期时间的问题。
这是我正在做的事情。
strftime("28/10/2014 09:05:55 p.m.", format='%d/%m/%Y %I:%M:%S %p')
##[1] "20/10/28 12:00:00 "

正如您所看到的,这里发生了三件不好的事情:

  1. 返回的日期是错误的!
  2. 时间总是设置为 12:00:00
  3. 返回值是字符串,而不是 datetime(这相当无关紧要...我稍后可以将其转换为 datetime)

那么,具体问题是:如何正确解析此字符串以获得 datetime?

2个回答

6

(1) 尝试使用strptime而不是strftime;我不确定strftime的功能,但也许不是你想要的。

(2) 我不认为"p.m."会起作用,你可能需要一些恰当的gsub("p.m.","PM",...)使用。

strptime("28/10/2014 09:05:55 PM", format='%d/%m/%Y %I:%M:%S %p')
## [1] "2014-10-28 21:05:55 EDT"
strptime("28/10/2014 09:05:55 p.m.", format='%d/%m/%Y %I:%M:%S %p')
## NA

太好了!我只是去掉了点号,现在它完美地运行了!strptime(gsub('\\.', '', "28/10/2014 09:05:55 PM"), format='%d/%m/%Y %I:%M:%S %p')非常感谢你! - Barranka

3

我认为你需要先将 p.m. 改为 PM(并使用适合输入处理的 strptime:

> strptime(sub("p\\.m\\.", "PM", "28/10/2014 09:05:55 p.m."), format='%d/%m/%Y %I:%M:%S %p')
[1] "2014-10-28 21:05:55 PDT"

当然,您可能还需要将 a.m. 转换为 AM


事实证明大小写无关紧要,只需要删除“a.m.”和“p.m.”中的点即可(现在我感到有点愚蠢,因为错过了这个细节)。 - Barranka
然后 gsub("\\.","",...) 我尝试了几次将点号放在格式规范中,但最终放弃了。 - IRTFM

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接