Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
对以0开头的日期进行lubridate日期分析_R_Lubridate - Fatal编程技术网

对以0开头的日期进行lubridate日期分析

对以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

我使用下面的代码来解析日期,但在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
库(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似乎可以解决这个问题,我需要不同的格式来解析一个大文档,它可能包含不同的日期格式。