2017-11-21 1 views
3

Einfach genug Frage, aber kann keine Antwort finden. Wenn ich habe einige Dummy-Zeitstempel:R: Wie kann ich das Format eines Zeitstempels überprüfen?

foo <- strftime(Sys.time(), "%Y-%m-%dT%H:%M:%SZ") 

Mit Format:

"%Y-%m-%dT%H:%M:%SZ". 

Wie würde ich prüfen, was Format foo ist? Ich muß überprüfen, ob ein Benutzer einen Zeitstempel im richtigen Format eingereicht hat und damit so etwas wie

if (func_bar(foo) != "%Y-%m-%dT%H:%M:%SZ") {stop("Complain")} 

Gibt es eine intrinsische R-Funktion dafür brauchen würde?

UPDATE: (Zur Verdeutlichung) Ich verstehe, dass ich das Format automatisch für den Benutzer ändern konnte, d. H. Einfach konvertieren, welches Datum immer gesendet wird. Aber in diesem speziellen Fall möchte ich es fangen. Zum Beispiel könnte ich verwenden:

foo1 <- as.POSIXlt(Sys.time(), "UTC", "%Y-%m-%dT%H:%M:%S") 

foo <- strftime(foo1, "%Y-%m-%dT%H:%M:%SZ") 

Um es in das richtige Format zu bekommen.

+1

Vielleicht so etwas wie dies würde für Sie arbeiten: https://stackoverflow.com/questions/13450360/how-to-validate-date-in-r – TUSHAr

Antwort

2

Sys.time() gibt die aktuelle Zeit als POSIXct standardmäßig. Dein Benutzer würde eine Zeichenzeit angeben, die ich annehme. Wenn Sie versuchen, es in POSIXct zu konvertieren, wird es NA werden, es sei denn, es hat das genaue Format, das Sie angaben. So wird in etwa so funktionieren:

if (is.na(as.POSIXct('2017-01-01 05:00:00', format = "%Y-%m-%dT%H:%M:%SZ"))) { 

    stop('Date not in the right format') 

} 
#Error: Date not in the right format 
0

Ich kenne keine solche Funktion. Hier ist, was ich tun werde:

curr.time <- strftime(Sys.time(), "%Y-%m-%d") 
if(!grepl('\\d{4}-\\d{2}-\\d{2}', as.character(curr.time))) {stop("Complain")} 
Verwandte Themen