【问题标题】:Convert text dd-mmm-yyyy hh.mm.ssss AM/PM to date将文本 dd-mmm-yyyy hh.mm.ssss AM/PM 转换为日期
【发布时间】:2016-11-29 06:09:47
【问题描述】:

我导入了一个带有dd-mmm-yyyy hh:mm:ss AM/PM 形式的日期字符串的文件。

  1. 我正在努力寻找将其转换为时间部分为 24 小时格式的日期时间格式的 R 代码,并且
  2. 如何创建仅包含日期的新变量。

作为日期之一的示例,请参见下文:
26-AUG-2016 08.48.43.65483000 AM

看来秒也是有小数的。

R 版本 3.3.1

【问题讨论】:

标签: r date datetime


【解决方案1】:

我们可以使用正确格式的strptime

strptime("26-AUG-2016 08.48.43.65483000 AM", "%d-%b-%Y %H.%M.%OS %p")
#[1] "2016-08-26 08:48:43 IST"

如果您只想要日期,我们可以将其包装在format

format(strptime("26-AUG-2016 08.48.43.65483000 AM", "%d-%b-%Y %H.%M.%OS %p"), 
                                                                    "%d-%m-%Y")
#[1] "26-08-2016"

只得到时间,

format(strptime("26-AUG-2016 08.48.43.65483000 AM", "%d-%b-%Y %I.%M.%OS %p"), 
                                                                     "%H:%M:%S")
#[1] "08:48:43"

format(strptime("26-AUG-2016 08.48.43.65483000 PM", "%d-%b-%Y %I.%M.%OS %p"), 
                                                                     "%H:%M:%S")
#[1] "20:48:43"

【讨论】:

  • 是0S一个零还是字符o
  • @Manfred 它是字符 O 而不是零。
  • 我有一个数据集调用 roapr16。其中有我们列 sys_date。当我运行评论 roapr16$sys_date
  • 那里不需要引号。试试strptime(roapr16$sys_date, "%d-%b-%Y %H.%M.%OS %p")
  • 运行以下代码: roapr16$newdate
【解决方案2】:

我建议使用lubridate 包:

lubridate::mdy_hms("01/22/2013 11:00:00 PM")

这会产生:

[1] "2013-01-22 23:00:00 UTC"

返回的对象属于"POSIXct"/"POSIXt" 类,因此如果您希望获取日期或提取时间,应该能够方便地操作它:

>> as.Date(lubridate::mdy_hms("01/22/2013 11:00:00 PM"))
[1] "2013-01-22" 

【讨论】:

  • 谢谢。日期位于数据集中名为 SYS_DATE 的列中。那么命令是否会是 roapr$newdate
  • 运行此命令时,我收到以下错误消息:所有格式都无法解析。未找到格式
  • @Manfred 显然,您的列中的格式比提供的示例中的格式多。通过提供足够的数据使您的帖子可重现,我敢打赌,它会得到答复。
猜你喜欢
  • 2017-04-08
  • 2020-07-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-11-28
相关资源
最近更新 更多