2016-07-24 63 views
0

我正在創建一個時間戳序列,開始和結束於每三個小時的特定日期。我嘗試過的方式工作得很好,但都有同樣的問題。在序列中間的某個地方,PST到PDT之間有時間轉換,我不知道爲什麼。以下是我已經嘗試了代碼,類似於本網站事前(Question1Question2)提出的問題:每三個小時的時間戳序列

TIME1 <- as.POSIXct("2000-01-01 02:00:00", tz = "America/Los_Angeles") 
TIME2 <- as.POSIXct("2016-02-29 23:00:00" , tz = "America/Los_Angeles") 
temp <- seq(from = TIME1, to = TIME2, by = "3 hours") 

當我看的temp輸出,它看起來很不錯,在第一時間尋找時除外下面

temp[720:745] 

[1] "2000-03-30 23:00:00 PST" "2000-03-31 02:00:00 PST" "2000-03-31 05:00:00 PST" "2000-03-31 08:00:00 PST" "2000-03-31 11:00:00 PST" "2000-03-31 14:00:00 PST" 
[7] "2000-03-31 17:00:00 PST" "2000-03-31 20:00:00 PST" "2000-03-31 23:00:00 PST" "2000-04-01 02:00:00 PST" "2000-04-01 05:00:00 PST" "2000-04-01 08:00:00 PST" 
[13] "2000-04-01 11:00:00 PST" "2000-04-01 14:00:00 PST" "2000-04-01 17:00:00 PST" "2000-04-01 20:00:00 PST" "2000-04-01 23:00:00 PST" "2000-04-02 03:00:00 PDT" 
[19] "2000-04-02 06:00:00 PDT" "2000-04-02 09:00:00 PDT" "2000-04-02 12:00:00 PDT" "2000-04-02 15:00:00 PDT" "2000-04-02 18:00:00 PDT" "2000-04-02 21:00:00 PDT" 
[25] "2000-04-03 00:00:00 PDT" "2000-04-03 03:00:00 PDT" 

在輸出的[1]線通知指定的時間間隔,這是不言而喻從「二零零零年三月三十零日23時00分00秒PST」到「2000年3月31日02:00:00 PST」,這是3小時,但在線[13]它從「2000-04-01 23:00:00 PST」到「2000-04-02 03:00:00 PDT」。注意那裏的時區變化。這貫穿整個序列。任何想法如何避免這樣的結果?我相信它會自動爲我轉換夏令時,這是我不想要的。如果我能將它保持爲LST(當地標準時間),那將非常好。

更新:我最近找到了this suggestion,我們只是將時區「UTC」轉換爲夏令時。它的工作原理是將所有時間標記爲UTC。然而,看看是否仍有辦法將它保持爲LST將會很好。

+1

[處理的天的數據,當我們切換到日光節約時間和回R]的可能的複製(http://stackoverflow.com/questions/13865172/handling-data-on-the-天 - 當我們切換到日光節約 - 時間和返回在r) – dayne

+1

LST =當地標準時間? –

+0

也可以看看'lubridate'軟件包中的'dst'和'dhours'功能。他們在這裏相關。 – shayaa

回答

4

如果您希望太平洋標準時間()作爲時區並且不想切換到太平洋白天時間(PDT),爲什麼不直接指定? "America/Los Angeles"裝置根據定義的時區是在一個特定的時間(包括DST交換機)在洛杉磯效果...

TIME1 <- as.POSIXct("2000-01-01 02:00:00", tz = "PST") 
TIME2 <- as.POSIXct("2016-02-29 23:00:00" , tz = "PST") 
temp <- seq(from = TIME1, to = TIME2, by = "3 hours") 
temp[720:745] 
[1] "2000-03-30 23:00:00 PST" "2000-03-31 02:00:00 PST" 
[3] "2000-03-31 05:00:00 PST" "2000-03-31 08:00:00 PST" 
[5] "2000-03-31 11:00:00 PST" "2000-03-31 14:00:00 PST" 
[7] "2000-03-31 17:00:00 PST" "2000-03-31 20:00:00 PST" 
[9] "2000-03-31 23:00:00 PST" "2000-04-01 02:00:00 PST" 
[11] "2000-04-01 05:00:00 PST" "2000-04-01 08:00:00 PST" 
[13] "2000-04-01 11:00:00 PST" "2000-04-01 14:00:00 PST" 
[15] "2000-04-01 17:00:00 PST" "2000-04-01 20:00:00 PST" 
[17] "2000-04-01 23:00:00 PST" "2000-04-02 02:00:00 PST" 
[19] "2000-04-02 05:00:00 PST" "2000-04-02 08:00:00 PST" 
[21] "2000-04-02 11:00:00 PST" "2000-04-02 14:00:00 PST" 
[23] "2000-04-02 17:00:00 PST" "2000-04-02 20:00:00 PST" 
[25] "2000-04-02 23:00:00 PST" "2000-04-03 02:00:00 PST" 

referenced question的,其建議使用UTC,評論說,三個字母的時區代碼可能不明確(例如,澳大利亞和北美都有東部標準時間,儘管this reference表明澳大利亞人編碼爲AEST)。你一定要小心仔細檢查一下你的結果,因爲以這種方式時區編碼有被操作系統特定的一個很好的機會......在輸出的[1]

+1

「PST」不是有效的時區,因此並不意味着「太平洋標準時間」。它是太平洋標準時間的縮寫,但也可能是其他時區的縮寫。 –

+0

好的;你建議我刪除這個答案嗎? (FWIW,看起來'tz = PST'與'tz = GMT-8'確實給出了相同的答案,所以也許操作系統時間/日期庫已經猜對了嗎? –

+0

它看起來不像'tz =「PST」 '給出與'tz =「GMT-8」'相同的答案,打印答案的*格式*是相同的(除了縮寫的時區外),但是底層的值不是(例如比較調用'unclass 'tz =「PST」'時,基礎值都是UTC(例如'.POSIXct(unclass(temp),tz =「UTC」)')。不需要刪除你的答案...雖然它可能是很好的編輯和更新/澄清任何使你認爲它應該被刪除的東西 –

1

注意,它會從「2000-03-30 23:00:00 PST」到3小時的「2000-03-31 02:00:00 PST」,但在線[13]從「2000-04-01 23:00:00 PST「到」2000-04-02 03:00:00 PDT「。

注意 「2000-04-01 23:00:00 PST」 到 「2000年4月2日03:00:00 PDT」 是 3小時。

如果你想不實行夏令時,但同樣從格林尼治標準時間偏移作爲當前本地時間時區,那麼你可以嘗試在時區名稱的建議的?timezone部分:

大多數平臺都支持格式爲「GMT + n」和「GMT-n」的時區,假設時區與UTC的固定偏移量(因此不包含DST)。

R> TIME1 <- as.POSIXct("2000-01-01 02:00:00", tz = "GMT-8") 
R> TIME2 <- as.POSIXct("2016-02-29 23:00:00", tz = "GMT-8") 
R> temp <- seq(from = TIME1, to = TIME2, by = "3 hours") 
R> temp[720:745] 
[1] "2000-03-30 23:00:00 GMT" "2000-03-31 02:00:00 GMT" 
[3] "2000-03-31 05:00:00 GMT" "2000-03-31 08:00:00 GMT" 
[5] "2000-03-31 11:00:00 GMT" "2000-03-31 14:00:00 GMT" 
[7] "2000-03-31 17:00:00 GMT" "2000-03-31 20:00:00 GMT" 
[9] "2000-03-31 23:00:00 GMT" "2000-04-01 02:00:00 GMT" 
[11] "2000-04-01 05:00:00 GMT" "2000-04-01 08:00:00 GMT" 
[13] "2000-04-01 11:00:00 GMT" "2000-04-01 14:00:00 GMT" 
[15] "2000-04-01 17:00:00 GMT" "2000-04-01 20:00:00 GMT" 
[17] "2000-04-01 23:00:00 GMT" "2000-04-02 02:00:00 GMT" 
[19] "2000-04-02 05:00:00 GMT" "2000-04-02 08:00:00 GMT" 
[21] "2000-04-02 11:00:00 GMT" "2000-04-02 14:00:00 GMT" 
[23] "2000-04-02 17:00:00 GMT" "2000-04-02 20:00:00 GMT" 
[25] "2000-04-02 23:00:00 GMT" "2000-04-03 02:00:00 GMT" 
R> attr(temp, "tzone") 
[1] "GMT-8" 
+0

我能夠複製你的輸出,但是,我確實收到警告說GMT-8是一個未知的時區,但這可能是一個好的也可以選擇。謝謝你的建議 – lurodrig