将字符串转换为秒

时间:2019-05-03 13:37:09

标签: r function dataframe

我需要编写一个转换字符串的函数-“ 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

3 个答案:

答案 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