2016-07-05 13 views
1

Dieser Befehl in RPOSIXct ignorieren Herkunft Parameter

format(as.POSIXct(15*60,origin="2016-05-31 00:00:00",ts="UTC"),"%Y-%m-%d %H:%M") 

mir dieses

"2016-05-30 20:15" 

Seltsam genug ergibt dies:

format(as.POSIXct(15*60,origin="2016-05-31 00:00:00",ts="UTC","%Y-%m-%d %H:%M")) 

gibt mir das erwartete Ergebnis:

"2016-05-31 00:15:00" 

und eine Warnmeldung, weil die letzte Klammer nicht korrekt platziert wurde.

Warum gibt nicht mein erster Befehl mir das erwartete Ergebnis (d. H. "2016-05-31 00:15")?

+0

Wo leben Sie? Ie. Was ist * deine * Zeitzone? –

+3

Ändere 'ts' zu' tz'. – eipi10

+0

@EricLecoutr: Montreal, aber ich habe EDT ohne Glück versucht – jeake

Antwort

1

Sie haben versehentlich ts anstelle von tz für das Zeitzonenargument verwendet. Normalerweise würde es nicht viel mehr als das geben, aber Zeitzonen haben einige Feinheiten, die schmerzhaft sein können (besonders wenn Sie, wie ich, nur zeitweise mit Datetime-Daten arbeiten und von Zeit zu Zeit Ihr R-Datum aktualisieren müssen Wissen), also ist das vielleicht ein bisschen mehr Erklärung wert.

Überprüfen Sie, was die Zeitzone in jedem der folgenden Beispiele ist. Wir schauen nur auf der as.POSIXct Funktion, weil das ist, wo das Problem ist:

  1. Ihr erstes Beispiel löst auf die Standard-Zeitzone (lokale Zeitzone), weil das ts Argument ignoriert. Als Ergebnis wird die Zeit, um Ihre Ortszeit "2016-05-30 20:15" in Ihrer Zeitzone geben umgewandelt (die wie US Eastern Daylight Time sieht):

    attr(as.POSIXct(15*60,origin="2016-05-31 00:00:00", ts="UTC"), "tzone") 
    
    [1] "" 
    

Die nächsten drei Versionen geben die "erwartete" Zeit ("2016-05-31 00:15:00"), da die Zeitzone in jedem dieser Fälle auf UTC eingestellt ist:

  1. Gleiche wie vorherige Beispiel, mit der Ausnahme tz Argument Sätzen Zeitzone UTC:

    attr(as.POSIXct(15*60,origin="2016-05-31 00:00:00", tz="UTC"), "tzone") 
    
    [1] "UTC" 
    
  2. In Ihrem zweiten Beispiel wird das ts Argument wird wieder ignoriert. Die Formatzeichenfolge wird jedoch als das tz-Argument interpretiert, da es unbenannt ist und tz das nächste (gültige) Argument in der Reihenfolge der Argumente zu as.POSIXct ist. Da es jedoch als tz Argument ungültig ist, wird es als GMT (für as.POSIXct wie erwähnt in der Hilfe-Datei) interpretiert:

    Eine Spezifikation Zeitzone für die Umwandlung verwendet werden, wenn eine erforderlich ist. Systemspezifisch (siehe Zeitzonen), aber "" ist die aktuelle Zeitzone und "GMT" ist UTC (Universal Time, Coordinated).Ungültige Werte werden am häufigsten als UTC behandelt, auf einigen Plattformen mit einer Warnung.

    Mit anderen Worten, diesmal wurde die Zeitzone versehentlich auf UTC gesetzt.

    attr(as.POSIXct(15*60,origin="2016-05-31 00:00:00", ts="UTC","%Y-%m-%d %H:%M"), "tzone") 
    
    [1] "%Y-%m-%d %H:%M" 
    

    Aber beachten Sie, dass, wenn wir das Argument als format Aussage nennen, die Zeitzone als Ihre lokale Zeitzone geht zurück gelöst werden, anstatt GMT (in den Zeitwert resultiert umgewandelt werden Ihre Ortszeit wieder):

    attr(as.POSIXct(15*60,origin="2016-05-31 00:00:00", ts="UTC", format="%Y-%m-%d %H:%M"), "tzone") 
    
    [1] "" 
    
  3. Wie in früheren, außer wir ts ändern tz:

    attr(as.POSIXct(15*60,origin="2016-05-31 00:00:00", tz="UTC","%Y-%m-%d %H:%M"), "tzone") 
    
    [1] "UTC"