对以0开头的日期进行lubridate日期分析
我使用下面的代码来解析日期,但在2017年8月4日、2017年8月5日的格式下,它似乎不起作用。基本上,如果日期从0开始,我们使用多种订单格式,如下所示。 例如,它将输出抛出为2014-04-20 UTC对以0开头的日期进行lubridate日期分析,r,lubridate,R,Lubridate,我使用下面的代码来解析日期,但在2017年8月4日、2017年8月5日的格式下,它似乎不起作用。基本上,如果日期从0开始,我们使用多种订单格式,如下所示。 例如,它将输出抛出为2014-04-20 UTC library(lubridate) dateStr <- "04-Apr-2014" newdate <- parse_date_time(dateStr,orders =c("m d y","m-d-y","m/d/y","d m y","d-m-y","d/m/Y","d B
library(lubridate)
dateStr <- "04-Apr-2014"
newdate <- parse_date_time(dateStr,orders =c("m d y","m-d-y","m/d/y","d m y","d-m-y","d/m/Y","d B y","d-B-y","d/B/y","B d y","B-d-y","B/d/y","y m d","y d m","y-m-d","y-d-m","y/m/d"),locale = "eng")
newdate
库(lubridate)
这不是一个bug,更可能是“功能”的副作用
这归结为lubridate
支持的“宽松”扩展。例如,严格意义上的m
是一个月数,但是lubridate
也扩展为包括缩写和完整的月份名称。类似地,y
通常只是两位数的年份,但也扩展到包括世纪。(与多形代码类似,这种灵活性是有代价的:可能会出错。)
此外,lubridate::parse_date_time
试图通过支持异构日期时间(从其手册页)来变得聪明,因此“09-01-01”和“090101”
将解析为相同的东西
在这种情况下,由于您使用了m
和y
,它尝试只使用数字,并将14
与y
匹配,忽略所有非数字(因为您建议使用数字),并将20
视为日期。如果您删除所有月份的前导格式字符串,它将不再尝试查找该顺序
因此,缓解这一问题:
- 减少可能的
订单=
格式的数量;你提供的越多,就越可能出错
- 删除所有以
“m”
开头的格式字符串,只有在确定日期不会以月份开头时才可行
- 如果您对所获取的字符串类型有一定的控制权,那么可以限制使用数字月份而不是命名月份,这可能会给解析器一个更好的机会
- 不要使用
parse\u date\u time
,可能是其他功能(例如dmy
或not-lubridate
)
- 如果您对此有足够强烈的感受,尽管您在尝试“大量”格式化字符串时对其持开放态度
这不是一个bug,更可能是“功能”的副作用
这归结为
lubridate
支持的“宽松”扩展。例如,严格意义上的m
是一个月数,但是lubridate
也扩展为包括缩写和完整的月份名称。类似地,y
通常只是两位数的年份,但也扩展到包括世纪。(与多形代码类似,这种灵活性是有代价的:可能会出错。)
此外,lubridate::parse_date_time
试图通过支持异构日期时间(从其手册页)来变得聪明,因此“09-01-01”和“090101”
将解析为相同的东西
在这种情况下,由于您使用了m
和y
,它尝试只使用数字,并将14
与y
匹配,忽略所有非数字(因为您建议使用数字),并将20
视为日期。如果您删除所有月份的前导格式字符串,它将不再尝试查找该顺序
因此,缓解这一问题:
- 减少可能的
订单=
格式的数量;你提供的越多,就越可能出错
- 删除所有以
“m”
开头的格式字符串,只有在确定日期不会以月份开头时才可行
- 如果您对所获取的字符串类型有一定的控制权,那么可以限制使用数字月份而不是命名月份,这可能会给解析器一个更好的机会
- 不要使用
parse\u date\u time
,可能是其他功能(例如dmy
或not-lubridate
)
- 如果您对此有足够强烈的感受,尽管您在尝试“大量”格式化字符串时对其持开放态度
这似乎是一个更好的报告地点,这将是lubridate问题页面:另外,为什么要尝试这么多格式?如果你只使用parse_date_time(dateStr,orders=c(“d-m-y”),locale=“eng”)
它似乎很有效。dmy(dateStr)
看起来也不错。是的,如果我只使用parse_date_time(dateStr,orders=c(“d-m-y”),locale=“eng”)
,它就会起作用。然而,上述代码适用于2014年4月4日,即使是所有格式。因此,我的问题是,当字符串的剩余部分在2014年4月非常明显时,如果是4或04,为什么会有所不同。。我需要将所有格式放在一个大文档(10000页文档)中,以便捕获不同的日期格式。这似乎是一个更好的报告位置,这将是lubridate问题页面:另外,为什么要尝试这么多格式?如果你只使用parse_date_time(dateStr,orders=c(“d-m-y”),locale=“eng”)
它似乎很有效。dmy(dateStr)
看起来也不错。是的,如果我只使用parse_date_time(dateStr,orders=c(“d-m-y”),locale=“eng”)
,它就会起作用。然而,上述代码适用于2014年4月4日,即使是所有格式。因此,我的问题是,当字符串的剩余部分在2014年4月非常明显时,如果是4或04,为什么会有所不同。。我需要放置所有格式,以便在一个大文档(10000页文档)中捕获不同的日期格式是的,m和y都导致了这个问题,用y替换y似乎可以解决这个问题,我需要不同的格式,因为我正在解析一个大文档,它可能包含不同的日期格式。是的,由于m和y都导致了这个问题,用y替换y似乎可以解决这个问题,我需要不同的格式来解析一个大文档,它可能包含不同的日期格式。