2017-12-05 7 views
1

Ich versuche, einige Zeitstempel (Charakter) zu einem POSIXct Objekt zu konvertieren:Parsing Zeitstempel - AM/PM nicht erkannt

> u <- "December 05, 2017 1:00 PM" 

Ich verwende as.POSIXct wie folgt:

> as.POSIXct(u, format = "%B %d, %Y %H:%M %p", tz = "UTC") 
[1] "2017-12-05 01:00:00 UTC" 

ich würde erwarten, dass der Ausgang 13 für die Stunde zu zeigen, statt 01:

"2017-12-05 13:00:00 UTC" 

Ich habe die Frage hier geschrieben: Parse timestamp with a.m./p.m aber ich habe anscheinend die richtige Eingabe und Format-String (mit %p).

as.POSIXct scheint den AM/PM-Teil der Zeichenfolge vollständig zu ignorieren und daher funktionieren die AM-Zeitstempel gut, aber die PM-Marken liegen um 12 Stunden zurück. Hier einige weitere Daten dies zu verdeutlichen:

> sample_tstamps 
[1] "December 05, 2017 8:00 AM" "December 05, 2017 9:00 AM" "December 05, 2017 10:00 AM" "December 05, 2017 11:00 AM" 
[5] "December 05, 2017 12:00 PM" "December 05, 2017 1:00 PM" "December 05, 2017 2:00 PM" "December 05, 2017 3:00 PM" 
[9] "December 05, 2017 4:00 PM" "December 05, 2017 5:00 PM" 
> as.POSIXct(sample_tstamps, format = "%B %d, %Y %H:%M %p", tz = "UTC") 
[1] "2017-12-05 08:00:00 UTC" "2017-12-05 09:00:00 UTC" "2017-12-05 10:00:00 UTC" "2017-12-05 11:00:00 UTC" 
[5] "2017-12-05 12:00:00 UTC" "2017-12-05 01:00:00 UTC" "2017-12-05 02:00:00 UTC" "2017-12-05 03:00:00 UTC" 
[9] "2017-12-05 04:00:00 UTC" "2017-12-05 05:00:00 UTC" 

Antwort

0

Wir brauchen %I statt %H

as.POSIXct(u, format = "%B %d, %Y %I:%M %p", tz = "UTC") 
#[1] "2017-12-05 13:00:00 UTC" 
+1

Danke, es scheint zu funktionieren und ich werde den Code aktualisieren. Ich bin jedoch überrascht - ich habe '% H' in der Vergangenheit (siehe https://www.stat.berkeley.edu/~s133/dates.html) immer ohne Probleme verwendet. – Gautam

0

mit dem R-Paket lubridate:

u <- "December 05, 2017 1:00 PM" 
lubridate::mdy_hm(u) 
#[1] "2017-12-05 13:00:00 UTC" 
+0

Danke, ich bin in der Lage, diese zu verwenden aber ich möchte keine externen Pakete für dieses spezielle Problem verwenden. – Gautam