从 R 中的字符串中提取日期时间

问题描述 投票:0回答:3

我的数据框的一列包含日期时间和一些字符串字符。喜欢:

"<13>1 2018-04-18T10:29:00.581243+10:00 KOI-QWE-HUJ vmon 2318 - -  Some Description..."

我希望只从中提取日期时间部分,这样我就有这样的东西:

2018-04-18 10:29:00.581243"

我已经尝试过以下方法:

as.Date(strptime("<13>1 2018-04-18T10:29:00.581243+10:00 KOI-QWE-HUJ vmon 2318 - -  Some Description...", "Date: %Y-%m-%d"))
但是,这会返回 NA。

任何人都可以帮我纠正这个问题吗?预先感谢。

编辑: 我尝试了以下方法来分别获取日期和时间。这可行,但我需要将它们放在一个专栏中:

提取日期:

as.Date(str_extract(x, "[0-9]{4}-[0-9]{2}-[0-9]{2}"), format="%Y-%m-%d")
> [1] "2018-04-18"

提取时间:

str_extract(x, "[0-9]{2}:[0-9]{2}:[0-9]{2}")
> [1] "10:29:00"
r
3个回答
4
投票

你是对的,你应该首先提取日期时间的字符形式。这是一种适用于该格式的方法。它只是使用正则表达式并匹配 4 位数字,然后在适当的情况下用

-
T
:
分隔的两位数字组。然后,您可以使用
lubridate::ymd_hms
作为
as.Date
的替代品,因为它是不同日期格式下的一把很好的瑞士军刀。

library(stringr)
library(lubridate)
string <- "<13>1 2018-04-18T10:29:00.581243+10:00 KOI-QWE-HUJ vmon 2318 - -  Some Description..."
string %>%
  str_extract("\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}") %>%
  ymd_hms()
#> [1] "2018-04-18 10:29:00 UTC"

reprex 包(v0.2.0)于 2018 年 5 月 2 日创建。


0
投票
anytime::anytime(sub(".*?\\s(.*?)\\+.*","\\1",a),tz = "UTC",T)
[1] "2018-04-18 10:29:00 UTC"

0
投票

我有一个类似的字符串

x="提取日期:美国东部时间 2020 年 12 月 14 日晚上 10:01"

期望的输出是:

“2020-12-14 22:01 美国东部时间”

我尝试了从类似答案到类似问题的各种功能,但没有成功

谢谢你

© www.soinside.com 2019 - 2024. All rights reserved.