Преобразовать строку в секунды - PullRequest
0 голосов
/ 03 мая 2019

Мне нужно написать функцию, которая преобразует строку: «11: 43: 02.454» на количество секунд между 0:00:00 и этим часом «11: 43: 02.454».

Например, это расчет: -

2,445 + 60⋅43 + 60⋅60⋅11 = 42182,454

и это вывод

time_str_to_seconds("11:43:02.454") 
[1] 42182.45

Ответы [ 3 ]

1 голос
/ 03 мая 2019

Использовал функцию 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
1 голос
/ 03 мая 2019

Если кто-то открыт для использования неосновного пакета, можно использовать lubridate:

lubridate::seconds(lubridate::hms("11:43:02.454"))
[1] "42182.454S"
0 голосов
/ 03 мая 2019

Я не уверен, как интерпретировать «и я не могу использовать пакеты», поэтому я предполагаю, что это означает, что вы не можете использовать что-либо за пределами 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...