将数字转换为时间(0,5 /小时= 00:30:00)

时间:2018-01-17 13:03:53

标签: r time

我正在尝试将数字转换为时间格式。 例如:  我计算在11 kWh充电站为电动汽车充电需要多长时间。

  • 能源需求 - 2,8 kWh
  • 充电时间= 2,8 kWh / 11 kWh = 0,257 h
  • 0,257 h = 15 min 25 sec。 = 00:15:25

如何在R?

中将0,257 h转换为00:15:25

3 个答案:

答案 0 :(得分:6)

基于这个例子,我们假设输入小于24(但如果不是这样的话,可以根据输入应该产生的定义来修改这些输入)。

1)chron :: times 像这样使用chron timestimes测量一天中几分之一的时间,因此将小时数(.257)除以24得到它所代表的一天的分数。

library(chron)

times(.257 / 24)
## [1] 00:15:25

这给出了一个chron "times"类对象。如果x是这样的对象,请使用format(x)将其转换为字符串(如果需要)。

2)POSIXct 虽然它更长,但它不使用任何包。它将时间作为字符串返回。 POSIXct以秒为单位测量时间,因此将小时数(.257)乘以3600,因为一小时内有3600秒。

format(as.POSIXct("1970-01-01") + 3600 * .257, "%H:%M:%S")
## [1] "00:15:25"

2a)这种变化也有效。它更长但不涉及转换因子。它返回一个字符串。

format(as.POSIXct("1970-01-01") + as.difftime(.257, units = "hours"), "%H:%M:%S")
## [1] "00:15:25"

更新:已添加(2)。还添加了(2a)和改进(2)。

答案 1 :(得分:3)

@GGrothendieck的答案似乎是去这里的方式。但是如果必须在基础R中执行此操作,则可以计算小时,分钟和秒组件并手动构建时间字符串:

x <- 2.257                               # number of hours
total <- round(x*60*60, digits=0)        # the total number of seconds
hours <- trunc(total / (60*60))
minutes <- trunc((x - hours) * 60)
seconds <- total %% 60

ts <- paste0(formatC(hours, width=2, flag="0"), ":",
             formatC(minutes, width=2, flag="0"), ":",
             formatC(seconds, width=2, flag="0"))
ts

[1] "02:15:25"

Demo

答案 2 :(得分:3)

tidyverse解决方案将使用hms包:


hms::hms(0.257 * 60^2)  
#> 00:15:25.2

为您提供课程hmsdifftime的对象。如果你想要一个字符串:


format(hms::hms(0.257 * 60^2))
#> [1] "00:15:25.2"
相关问题