对以 0 开头的日期进行 lubridate 日期解析
lubridate date parsing for dates starting with 0
我正在使用以下代码解析日期,但它似乎无法按照 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 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
这不是错误,更可能是 "feature".
的副作用
这归结为 lubridate
支持的 "relaxed" 扩展。例如,严格意义上的 m
是月份 number,但 lubridate
也扩展为包括缩写和完整的月份名称。同样,y
通常只是两位数的年份,但也扩展为包括世纪。 (类似于多态代码,这种灵活性是有代价的:出错的可能性。)
此外,lubridate::parse_date_time
试图通过支持 heterogenuous date-times
(来自其手册页)变得聪明,因此 "09-01-01"
和 "090101"
将解析为相同的东西.
在这种情况下,由于您使用 m
和 y
,它会尝试仅使用数字,并将 14
匹配到 y
,忽略所有非-数字(因为您 建议 数字),并将 20
视为日期。如果您删除所有以月份为前导的格式字符串,它将不再尝试查找该顺序。
因此,针对此问题的缓解措施:
- 减少可能的
orders=
格式;你提供的越多,就越容易出错
- 删除所有以
"m"
开头的格式字符串,只有在您确定日期不以月份 开头时才可行
- 如果您对获取的字符串类型有一些控制,那么限制使用数字与命名月份,也许会给解析器一个更好的机会
- 不要使用
parse_date_time
,也许使用其他函数(例如,dmy
或不使用-lubridate
)
- file a bug 如果您对此有足够强烈的感受,尽管您在尝试 "a gazillion" 格式化字符串时让自己敞开心扉
我正在使用以下代码解析日期,但它似乎无法按照 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 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
这不是错误,更可能是 "feature".
的副作用这归结为 lubridate
支持的 "relaxed" 扩展。例如,严格意义上的 m
是月份 number,但 lubridate
也扩展为包括缩写和完整的月份名称。同样,y
通常只是两位数的年份,但也扩展为包括世纪。 (类似于多态代码,这种灵活性是有代价的:出错的可能性。)
此外,lubridate::parse_date_time
试图通过支持 heterogenuous date-times
(来自其手册页)变得聪明,因此 "09-01-01"
和 "090101"
将解析为相同的东西.
在这种情况下,由于您使用 m
和 y
,它会尝试仅使用数字,并将 14
匹配到 y
,忽略所有非-数字(因为您 建议 数字),并将 20
视为日期。如果您删除所有以月份为前导的格式字符串,它将不再尝试查找该顺序。
因此,针对此问题的缓解措施:
- 减少可能的
orders=
格式;你提供的越多,就越容易出错 - 删除所有以
"m"
开头的格式字符串,只有在您确定日期不以月份 开头时才可行
- 如果您对获取的字符串类型有一些控制,那么限制使用数字与命名月份,也许会给解析器一个更好的机会
- 不要使用
parse_date_time
,也许使用其他函数(例如,dmy
或不使用-lubridate
) - file a bug 如果您对此有足够强烈的感受,尽管您在尝试 "a gazillion" 格式化字符串时让自己敞开心扉