Frage Konvertieren von chr "00:00:00" zu Datum-Uhrzeit "00:00:00"


Meine Frage kommt von diese Frage. Die Frage hatte die folgende Zeichenfolge.

x <- "2007-02-01 00:00:00"
y <- "02/01/2007 00:06:10"

Wenn Sie versuchen, diese Zeichenfolge in ein Date-Class-Objekt zu konvertieren, passiert etwas Lustiges.

Dies ist ein Beispiel aus @ nrusells Antwort.

as.POSIXct(x,tz=Sys.timezone())
[1] "2007-02-01 EST"

as.POSIXct(y,format="%m/%d/%Y %H:%M:%S",tz=Sys.timezone())
[1] "2007-02-01 00:06:10 EST" 

Wie du siehst, 00:00:00 verschwindet aus dem ersten Beispiel. @Richard Scriven hat das folgende Beispiel in unserer Diskussion mit verwendet lubridate.

dt <- as.POSIXct("2007-02-01 00:00:00")
hour(dt) <- hour(dt)+1
dt
[1] "2007-02-01 01:00:00 EST"
hour(dt) <- hour(dt)-1
dt
[1] "2007-02-01 EST"

Noch einmal, 00:00:00 verschwindet. Warum vermeidet R das Halten? 00:00:00 im Date-Class-Objekt nach der Konvertierung? Wie können wir halten? 00:00:00?


5
2017-09-21 22:24


Ursprung


Antworten:


Es ist nur die print das entfernt die Genauigkeit, wenn der Zeitteil eines Datums Mitternacht ist. Dies ist Liter erklärt in ??strftime Hilfe, speziell der Formatparameter:

Eine Zeichenfolge. Der Standardwert ist "% Y-% m-% d% H:% M:% S", falls vorhanden   Komponente hat eine Zeitkomponente, die nicht Mitternacht ist, und "% Y-% m-% d"   Andernfalls

Eine Idee ist es, die S3-Methode neu zu definieren print für POSIXct Objekt:

print.POSIXct <- function(x,...)print(format(x,"%Y-%m-%d %H:%M:%S"))

Jetzt für Ihr Beispiel, wenn Sie Ihr x-Datum (mit Mitternachtsteil) drucken, erhalten Sie:

x <- "2007-02-01 00:00:00"
x <- as.POSIXct(x,tz=Sys.timezone())
x
[1] "2007-02-01 00:00:00"

5
2017-09-21 22:40