我在 R 中有一个时间向量,all_symbols$Time,我试图找出如何获取时间(或将时间转换为字符串而不丢失信息)。我用
strptime(all_symbol$Time[j], format="%H:%M:%S")
出于某种原因假设日期是今天并返回
[1]“2013-10-18 09:34:16”
R 中的日期和时间格式非常烦人。我只是想在不添加太多软件包的情况下获得时间(真的可以 - 我在学校计算机上无法安装库)。
一旦使用
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 类。
最近遇到了同样的问题,并发现了这篇文章和其他帖子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
。