2017-06-23 4 views
0

ich umwandeln kann wie die meiste Zeit POSIXct zum Beispiel:Konvertieren einer 24h + Stunde POSIXct

as.POSIXct("20:16:32", format = "%H:%M:%S") 
[1] "2017-06-23 20:16:32 EDT" 

Aber sobald die Zeit über 24 Stunden geht es nicht:

as.POSIXct("24:16:32", format = "%H:%M:%S") 
[1] NA 

Welche einige macht Sinn als 24:16:32 sollte eher als 00:16:32

gelesen werden. Solche Standards von 24+ sind jedoch in der Gestaltung des öffentlichen Verkehrs gut verteilt. Ich könnte natürlich alle "24:" durch "00:" ersetzen, aber ich bin mir sicher, dass es einen eleganteren Ausweg gibt.

+1

24:16:32 soll nie an erster Stelle geschrieben werden, weil es nicht als reale Tageszeit nicht existiert. –

+0

Stimmt, aber es existiert als Standard im öffentlichen Verkehr und sobald Sie Zeitpläne für einen einzigen Tag definieren, so meine Frage. –

+0

ähnlich wie https://stackoverflow.com/questions/17889948/working-with-time-values-greater-than-24-hours-in-r –

Antwort

0

Lesen Sie die Zeitzeichenfolge in einen Datenrahmen dd und setzen Sie next_day auf 1, wenn die Stunde 24 oder mehr oder 0 überschreitet, falls nicht. Ziehe 24 von der Stunde ab, wenn next_day 1 ist und addiere 1 Tag im Wert von Sekunden. Da heute 23. Juni 2017 würde dies stundenlang arbeitet zwischen 0 und 47.

x <- "24:16:32" # test input 

dd <- read.table(text = x, sep = ":", col.names = c("hh", "mm", "ss")) 
next_day <- dd$hh >= 24 
s <- sprintf("%s %0d:%0d:%0d", Sys.Date(), dd$hh - 24 * next_day, dd$mm, dd$ss) 
as.POSIXct(s) + next_day * 24 * 60 * 60 
## "2017-06-24 00:16:32 EDT" 
Verwandte Themen