2016-07-24 108 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