只需要 R 中日期时间对象的时间部分

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

我在 R 中有一个时间向量,all_symbols$Time,我试图找出如何获取时间(或将时间转换为字符串而不丢失信息)。我用

strptime(all_symbol$Time[j], format="%H:%M:%S")

出于某种原因假设日期是今天并返回

[1]“2013-10-18 09:34:16”

R 中的日期和时间格式非常烦人。我只是想在不添加太多软件包的情况下获得时间(真的可以 - 我在学校计算机上无法安装库)。

r time
2个回答
22
投票

一旦使用

strptime
,您将必须获得一个日期时间对象,并且格式字符串中没有日期的默认行为是假定今天的日期。如果您不喜欢这样,则需要在前面添加一个字符串,即您选择的日期。

@James 的建议与我的建议相同:

format(all_symbol$Time[j], format="%H:%M:%S")

您可以在“%_”格式选择器后面添加字母:

format(Sys.time(), "%Hh:%Mm:%Ss")
#[1] "16h:24m:56s"

前段时间出现了

lubridate
包,具有多种提取器功能:
second(), minute(), hour(), day(), yday(), mday(), wday(), week(), month(), year(), tz()

我所知道的唯一具有时间类(即没有关联日期值的时间)的包是 package:chron。然而,我发现使用格式作为从 POSIXt 对象输出字符值的方式非常适合需要因子输入的函数。

现在还有一个名为“hms”的软件包,它具有某种用于小时、分钟和秒的功能。

hms:一天中的美好时光

基于“difftime”类,实现用于存储和格式化时间值的 S3 类。


4
投票

最近遇到了同样的问题,并发现了这篇文章和其他帖子R:如何处理没有日期的时间?鼓舞人心。我愿意为有类似问题的人贡献一点。

如果您只想使用 R 基数,请利用

as.Date(..., format = ("..."))
将日期转换为标准格式。然后,您可以使用
substr
提取时间。例如
substr("2013-10-01 01:23:45 UTC", 12, 16)
给你
01:23

如果您可以使用包

lubridate
,像
mdy_hms
这样的功能将使生活变得更加轻松。而且
substr
大多数时候都有效。

如果你想比较时间,如果它们是 Date 或 POSIXt 对象,它应该可以工作。如果您只想要时间部分,可以将其强制转换为数字(您可能需要稍后将其转换回来)。例如

as.numeric(hm("00:01"))
给出
60
,这意味着现在是 00:00:00 后 60 秒。
as.numeric(hm("23:59"))
会给
86340

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