解析字符串/ ISO 8601日期

时间:2020-10-01 21:43:57

标签: r date datetime datetime-format lubridate

我正在寻找一种将多种字符串格式解析为日期/日期时间的方法。对于我的目的,as_datetime()函数在下面的前3个中效果很好,但在第四个中却不能。有什么建议吗?

library(lubridate)
as_datetime("20200603", tz = "America/New_York")
as_datetime("20200603231413", tz = "America/New_York")
as_datetime("20200603231413-0400", tz = "America/New_York")
as_datetime("20200528203000+0000", tz = "America/New_York")


>   as_datetime("20200603", tz = "America/New_York")
[1] "2020-06-03 EDT"

>   as_datetime("20200603231413", tz = "America/New_York")
[1] "2020-06-03 23:14:13 EDT"

>   as_datetime("20200603231413-0400", tz = "America/New_York")
Date in ISO8601 format; converting timezone from UTC to "America/New_York".
[1] "2020-06-03 23:14:13 EDT"  

>   as_datetime("20200528203000+0000", tz = "America/New_York")
[1] NA
Warning message:
All formats failed to parse. No formats found. 

>   as_datetime("20200528203116+0000", tz = "America/New_York")
[1] NA
Warning message:
All formats failed to parse. No formats found. 

1 个答案:

答案 0 :(得分:1)

您可以使用format=提供更多格式,在这种情况下,请添加%z定义为的?strptime

     '%z' Signed offset in hours and minutes from UTC, so '-0800' is 8
          hours behind UTC. Values up to '+1400' are accepted.
          (Standard only for output.  For input R currently supports it
          on all platforms.)
library(lubridate)
as_datetime("20200603231413-0400", format = "%Y%m%d%H%M%S%z", tz = "America/New_York")
# [1] "2020-06-03 23:14:13 EDT"
as_datetime("20200628203000+0000", format = "%Y%m%d%H%M%S%z", tz = "America/New_York")
# [1] "2020-06-28 16:30:00 EDT"
as_datetime("20200528203116+0000", format = "%Y%m%d%H%M%S%z", tz = "America/New_York")
# [1] "2020-05-28 16:31:16 EDT"