将十进制小时转换为HH:MM:SS

4
我可以帮您翻译成中文。该内容涉及IT技术,需要将十进制小时转换为HH:MM:SS时间格式。例如,输入如下:
4.927778 hours

期望输出:

04:55:40
6个回答

8
您可以尝试以下方法:
dh <- 4.927778
strftime(as.POSIXct(dh * 60 * 60, origin = Sys.Date(), tz = "GMT"), format = "%H:%M:%S")
## [1] "04:55:40"

1
值得指出的是,这仅适用于小于24小时的值,否则您将会进入下一天,这将重置%H的值为0。 - pieterbons

2

你应该能够了解你需要做什么 -

a <- "4.927778 hours"
a <- as.numeric(gsub(x = a,pattern = " hours", replacement = ""))

h <- a%/% 1
m <- ((a%% 1)*60) %/% 1
s <- round((((a%% 1)*60) %% 1)*60,0)
paste(h,m,s,sep = ":")
#[1] "4:55:40"

2

另一种解决方案是将其转换为日期/时间类,然后以适当的方式进行格式化。

format(ISOdatetime(1900,1,1,0,0,0, tz="GMT") + 
       as.difftime(4.927778, unit="hours"), "%H:%M:%S")

1

当您拥有小时数、分钟数和秒数的整数时,可以使用sprintf()按照您的意愿格式化输出。这些可以使用模运算(%%)和floor()/round()进行计算。小时数可以使用readr包中的parse_number()函数非常好地从字符串中提取:

library(readr) 
input <- "4.927778 hours"
hrs <- parse_number(input)
hours <- floor(hrs)
minutes <- floor((hrs %% 1) * 60)
seconds <- round((((hrs %% 1) * 60) %% 1) * 60)

sprintf("%02d:%02d:%02d", hours, minutes, seconds)

这种策略的优点是,与使用 strftime() 的解决方案相比,它仍然适用于大于24小时的时间差。

0

这也适用于负值。

convertHours<-function(hours){ timeoffset<-as.numeric(as.POSIXct(format(Sys.time(), tz = "GMT")) - as.POSIXct(format(Sys.time(), tz = ""))) hoursMinutes<-ifelse(hours<0,paste0("-",strftime(as.POSIXct((abs(hours)+timeoffset) * 60 * 60, origin = Sys.Date(), tz =""), format = "%H:%M")), strftime(as.POSIXct((hours+timeoffset) * 60 * 60, origin = Sys.Date(), tz =""), format = "%H:%M")) }

h<-1.33

hhmm<-convertHours(h)

hhmm [1] "01:19"

h<--1.33

hhmm<-convertHours(h)

hhmm [1] "-01:19"


-1
如果您正在使用 .net/C#,您可以使用一些日期计算。
var when = DateTime.UtcNow; // or any time of your choice
var later = when.AddHours(4.927778);
var span = later - when;
Console.WriteLine(span)

我现在看到了R标志。也许这会给你一个提示,告诉你在哪里寻找类似的东西。我不懂R。


1
这个编程语言是R(每当我看到示例代码时,我都会有点困惑)。 - user2864740

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接