【发布时间】:2015-08-01 01:19:16
【问题描述】:
我正在使用包lubridate 来解析异类格式日期的向量并将它们转换为字符串,如下所示:
parse_date_time(c('12/17/1996 04:00:00 PM','4/18/1950 0130'), c('%m/%d/%Y %I:%M:%S %p','%m/%d/%Y %H%M'))
这是结果:
[1] NA NA
Warning message:
All formats failed to parse. No formats found.
如果我删除第一个格式字符串中的%p,它会错误地解析第一个日期字符串,并且仍然不解析第二个,如下所示:
[1] "1996-12-17 04:00:00 UTC" NA
Warning message:
1 failed to parse.
字符串中的 4PM 时间在结果中被解析为 4AM。
有没有人经历过这种奇怪的行为?
【问题讨论】:
-
我能够复制错误。
parse_date_time(x = mydates, orders = c('m/d/Y I:M:S p','m/d/Y HM'), locale = "eng")给出了第一个但不是第二个日期/时间的正确值。parse_date_time(mydates1, orders = c('%m/%d/%Y %H%M'))不起作用但是....strptime(mydates1, format="%m/%d/%Y %H%M")确实起作用了... 当mydates1只是第二次约会时4/18/1950 0130 -
我认为问题出在第二个字符串的
0130上。如果你把它改成4/18/1950 01:30,我相信一切都会按预期进行。 -
@JasonAizkalns '0130' 可以单独解析:
parse_date_time('0130', '%H%M')给出"0-01-01 01:30:00 UTC"。 -
@Pascal 很好,实际上,看起来
4/18/1950中的4缺少前导零是问题所在。parse_date_time("4/18/1950 0130", "%m%d%Y %H%M")失败,但parse_date_time("04/18/1950 0130", "%m%d%Y %H%M")有效。 -
@Pascal 我已将 this issue 添加到 GitHub 存储库。