我需要编写一个转换字符串的函数-“ 11:43:02.454” 到0:00:00到本小时之间的秒数- “ 11:43:02.454”。
例如,这是计算:-
2.454 +60⋅43+60⋅60⋅11= 42182.454
这就是输出
time_str_to_seconds("11:43:02.454")
[1] 42182.45
答案 0 :(得分:1)
如果开放使用非基本软件包,则可以使用lubridate
:
lubridate::seconds(lubridate::hms("11:43:02.454"))
[1] "42182.454S"
答案 1 :(得分:1)
使用函数as.POSIXct
将字符串转换为日期/时间对象并从中减去午夜。
t1<-as.POSIXct("11:43:02.454", "%H:%M:%OS", tz="UTC")
t0<-as.POSIXct("0:0:0", "%H:%M:%OS", tz="UTC")
difftime(t1, t0, units="secs")
#Time difference of 42182.45 secs
答案 2 :(得分:0)
我不确定如何解释“并且我不能使用软件包”,因此我假设这意味着您不能使用base R
以外的任何内容。
所以也许这样的东西有些令人费解?将所有内容(而不是不必要地)放入data frame
中也有很好的好处(?)。
toSecondsConvert <- function(timeString){
timeStringUnits <- c("hrs", "mins", "sec", "millisec")
timeStringUnitsConvertMultiplier <- c(3600, 60, 1, 1/1000)
timeStringSeparated <- base::strsplit(timeString, regex("[\\:\\.]"))
timeStringDf <- data.frame(Units = timeStringUnits, Vals = as.numeric(unlist(timeStringSeparated)), Multipliers = timeStringUnitsConvertMultiplier, stringsAsFactors = FALSE)
timeStringDf$ConvertedVals <- timeStringDf$Multipliers * timeStringDf$Vals
timeInSeconds <- sum(timeStringDf$ConvertedVals)
timeInSeconds
print(timeInSeconds)
}
toSecondsConvert("11:00:00.000")
# [1] 39600