2016-07-05 91 views
1

此命令中的RPOSIXct忽略原點參數

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

給了我這個

"2016-05-30 20:15" 

古怪夠了:

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

給了我預期的結果:

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

和警告消息,因爲最後一個支架放置不正確。

爲什麼我的第一個命令不能給我預期的結果(即「2016-05-31 00:15」)?

+0

你在哪裏居住? IE瀏覽器。什麼是*你的*時區? –

+3

將'ts'更改爲'tz'。 – eipi10

+0

@EricLecoutr:蒙特利爾,但我嘗試過沒有運氣的EDT – jeake

回答

1

對於timezone參數,您不小心使用了ts而不是tz。通常情況下,除此之外沒有更多的東西,但時區有一些微妙的東西可能會讓人痛苦(特別是如果像我一樣,只是間歇性地處理日期時間數據,並且不得不不時地刷新R日期時間知識),所以這可能值得多解釋一下。

檢查以下每個示例中的時區。我們只會在as.POSIXct功能,因爲那裏的問題是:

  1. 你的第一個示例解析到默認的時區(當地時區),因爲ts參數將被忽略。作爲結果的時間被轉換到本地時間在你的時區(看起來像美國東部夏令時間)給"2016-05-30 20:15"

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

接下來的三個版本給「預計」時間("2016-05-31 00:15:00"),因爲在以下每種情況下時區都設置​​爲UTC:

  1. 同前面的例子中,除了tz參數設置時區爲UTC:

    attr(as.POSIXct(15*60,origin="2016-05-31 00:00:00", tz="UTC"), "tzone") 
    
    [1] "UTC" 
    
  2. 在第二個例子中,ts參數被再次忽略。但是,格式字符串被解釋爲tz參數,因爲它是未命名的,而tz是參數as.POSIXct的下一個(有效)參數。然而,由於它是作爲一種tz參數無效,則將其解釋爲GMT(如幫助文件注意到as.POSIXct):

    的時區說明書用於轉化,如果需要一個。特定系統(請參見時區),但「」是當前時區,「GMT」是UTC(世界時間,協調)。在一些帶有警告的平臺上,無效值通常被視爲UTC。

    換句話說,這次偶然的時區設置爲UTC。

    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" 
    

    但是請注意,如果我們命名參數作爲format聲明中,時區追溯到被解析爲您的本地時區,而不是GMT(導致時間值轉換爲當地再次時間):

    attr(as.POSIXct(15*60,origin="2016-05-31 00:00:00", ts="UTC", format="%Y-%m-%d %H:%M"), "tzone") 
    
    [1] "" 
    
  3. 與以前相同,但我們改變tstz

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