2016-02-19 137 views
0

如何将小数转换为天,小时,分和秒?将小数转换为R,日分,小时和秒

十进制将显示的分钟数,我想将其转换成任何它说“X days, Y hours, Z minutes and W seconds”的字符串,或显示“DD:HH:MM:SS

我已经找到了几个帖子相似,但其中没有一个是在R

做过到目前为止,我的代码是:

seconds=55800 
lengths=strftime(as.POSIXct(seconds, origin = Sys.Date(), tz = "UTZ"), format = "%d %H:%M:%S") 

我需要一个新的原点但是。由于55800秒为15.5小时,结果显示19日15小时30分钟,因为起源基于今天的日期(19日)。我需要以某种方式创建一个通用的原点。

+2

请给出一个例子和预期输出 – akrun

+1

做一些除法和乘法是否如此复杂? – Tensibai

+0

我已经添加了我的代码,并且我知道这个问题是什么,而不是如何解决它。之前我没有包括它,因为我确信可以采用更有说服力的方式。 @Tensibai - 不,不是,谁说这是? – sym246

回答

1

问题是输入是分钟数,但代码以秒开始。我已经假设了几分钟。

1)计算的天数,然后将转换的分钟数到POSIXct和产生使用sprintf的字符串。没有包被使用。

# input 
mins <- 55800/60 

days <- mins %/% (24 * 60) 
ct <- as.POSIXct(60 * mins, origin = "1970-01-01", tz = "UTC") # POSIXct 
sprintf("%02d:%s", days, substring(ct, 12)) 

## [1] "00:15:30:00" 

2)使用克隆氏病,并从它上面days略短,并且避免了潜在的时间段错误:

library(chron) 
sprintf("%02d:%s", days, times(chron(mins/(24 * 60)))) 
## [1] "00:15:30:00" 

更新:固定/简化。新增(2)。

+0

我在原始文章中看到了我的分钟/秒的位置 - 我使用哪一个并不重要。但是,5000分钟等于3天11小时20分钟 - 不是3天6小时20分钟...(或55800不是10小时30分钟的最新编辑) – sym246

+0

已修复。 55800秒是930分钟,即15.5小时。 –

+0

非常感谢 – sym246

1

lubridate软件包具有各种帮助程序,对于类似的用例很方便。

> require(lubridate) 
> seconds_to_period(55800) 
[1] "15H 30M 0S" 
相关问题