Konvertieren von Datum-Uhrzeit auf einen formatierten Zeit-string
Ich weiß nicht, warum es nicht funktioniert. Hier ist mein code:
> t <- hms("14:11:49")
> t
[1] "14H 11M 49S"
t <- t + minutes(3)
> format(t, format="%H:%M:%S")
[1] "14H 14M 49S"
# Expected output: "14:14:49"
Update:
Aktuell fand ich diese Lösung, aber ich hoffe, es ist eine mehr elegante:
t <- hms("14:11:49") # example period object
sprintf("%s:%s:%s", hour(t), minute(t), second(t))
#"14:11:49"
Du musst angemeldet sein, um einen Kommentar abzugeben.
Nicht sicher, warum Sie brauchen, um zu konvertieren, um
hms
und zurück zu den ursprünglichen string-format. Vielleichtparse_date_time
Funktion ist, was Sie brauchen:EDIT:
Wir können
paste
:Benchmark-Ausgang:
chicken-egg
problem:POSIXct_myTime <- parse_date_time(myTime,"hms")
. Ich habe nicht myTime im string-format. Ich Las Millionen von Einträgen in%H:%M:%S
format, filtern Sie und wollen zurück zu schreiben aus genau dem gleichen format wie der Eingang.hms("14:11:49")
hms("14:11:49")
nur um ein Objekt aus einem Zeit-string. Mein workflow ist wie folgt: Lesen Sie in Millionen von Einträgen der time string; verwenden lubridate, um einige der Berechnung; schreiben wieder aus, um text-Datei das Ergebnis. Bitte überprüfen Sie die Anfang meine aktualisierte Fragepaste
Funktion in diesem Fall. Aber ich hatte gehofft, dass es einen Weg gibt, um zu vermeiden, aufrufenhour
,minute
undsecond
. Mein Gedanke: Dielubridate
Paket ist offensichtlich sehr gut im Lesen in vielen Eingangs-Datum-Zeit-Formate, aber nicht sehr gut an was die Ausgänge wieder raus.paste
Lösung gibt "04" als "4". Ich habe eine einfache Lösung mit derformat
Funktion.Das problem ist, dass
class(t)
ist "Zeit" und dieformat.Period()
Funktion keinen parameter fürformat=
. Diet
Objekt ist nicht ein standard -POSIXt
style-Objekt, dass Sie verwendet werden können zur Verwendung mitformat()
. Nur dieformat.POSIXct()
undformat.POSIXlt()
Funktionen Verhalten sich so.So vielleicht die einfachste Sache zu tun wäre, um zu definieren, eine Helfer-Funktion schalten Sie den
Period
Klasse inPOSIXct
. Kann man das mit:Es ist wichtig zu beachten, dass
POSIXct
ist ein Datum/Zeit-Wert, nicht nur einen Zeit-Wert. Also standardmäßig haben wir nur annehmen, es begann um Mitternacht heute. Aber dann können wir ein format in der Art und Weise Sie wollteIch muss zugeben, ich bin kein Experte
lubridate
user so vielleicht habe ich es übersehen, eine offensichtliche Funktion, aber es scheint, die Optionen für die Formatierunglubridate
Klassen in "schön" formatiert sind sehr begrenzt.format.POSIXct()
undformat.POSIXlt()
Funktionen.format
Funktion mit der"%H:%M:%S"
syntax.Die vorgeschlagene Lösung nicht drucken führenden Nullen. Die folgende Lösung scheint zu sein, elegant: