lubridate,将日期时间转换为格式化的时间字符串
我不知道它为什么不起作用。这里是我的代码:lubridate,将日期时间转换为格式化的时间字符串
> t <- hms("14:11:49")
> t
[1] "14H 11M 49S"
t <- t + minutes(3)
> format(t, format="%H:%M:%S")
[1] "14H 14M 49S"
# Expected output: "14:14:49"
更新:
目前我发现这个解决办法,但我希望有一个更优雅的一个:
t <- hms("14:11:49") # example period object
sprintf("%s:%s:%s", hour(t), minute(t), second(t))
#"14:11:49"
不知道为什么你需要转换为hms
并返回到初始字符串格式。也许parse_date_time
功能是你所需要的:
library(lubridate)
myTime <- "14:11:49"
hms(myTime)
#"14H 11M 49S"
POSIXct_myTime <- parse_date_time(myTime,"hms")
format(POSIXct_myTime, format="%H:%M:%S")
#"14:11:49"
编辑: 我们可以用paste
:
t <- hms("14:11:49")
t
#[1] "14H 11M 49S"
t <- t + minutes(3)
t
#[1] "14H 14M 49S"
paste(hour(t),minute(t),second(t),sep=":")
#[1] "14:14:49"
基准输出:
op <- microbenchmark(
Use_paste=paste(hour(t),minute(t),second(t),sep=":"),
Use_sprintf=sprintf("%s:%s:%s", hour(t), minute(t), second(t)),
times=1000000L)
op
# Unit: microseconds
# expr min lq median uq max neval
# Use_paste 28.072 31.695 32.601 33.506 44253.42 1e+06
# Use_sprintf 29.582 33.807 34.412 35.619 44367.52 1e+0
的问题是,class(t)
是“期间“,format.Period()
函数没有format=
的参数。 t
对象不是标准的POSIXt
样式对象,您可能会习惯于使用format()
。只有format.POSIXct()
和format.POSIXlt()
函数的行为将如此。
所以也许最简单的做法是定义一个辅助函数将Period
类变为POSIXct
。我们可以做到这一点:
as.POSIXct.Period <- function(x, start=today()) {
X<-as.interval(x, start);
[email protected][email protected]
}
需要注意的是POSIXct
是一个日期/时间值,不只是一个时间值是非常重要的。所以默认情况下,我们假设它在今天午夜开始。但是,我们可以使用格式你想
format(as.POSIXct(t), format="%H:%M:%S")
# [1] "14:11:49"
的方式,我必须承认,我不是专家lubridate
用户所以也许我忽略了一个显而易见的功能,但它似乎选项用于格式化lubridate
类分为“漂亮“的格式非常有限。
此解决方案,但需要将时间转换为数据的额外步骤e_time对象。无论如何,感谢提及'format.POSIXct()'和'format.POSIXlt()'函数。 – biocyberman 2014-09-05 13:25:41
那么,你原来的问题只是你不知道为什么它不起作用,它并不是要求任何东西的“解决方案”。如果这不是你真正的问题,那么我会尽力在未来提出你的问题。我只进行了转换,因为您似乎确实希望使用格式函数和'“%H:%M:%S”'语法。 – MrFlick 2014-09-05 13:30:07
这似乎是一个更好的主意。 – MrFlick 2014-09-04 14:53:46
我认为(偏执)字符串格式时,写入文本文件时为每个条目保存一些字节。然而你的解决方案并没有达到我想要达到的效果。这一行是'egg-egg'问题:'POSIXct_myTime biocyberman 2014-09-05 08:47:58
“...字符串格式在写入文本文件时为每个条目保存一些字节...” - 不确定这是否为真...另外,“...我没有字符串格式的myTime .. 。“ - 在你的文章中你传递一个字符串给hms - 'hms(”14:11:49“)' – zx8754 2014-09-05 09:29:15