r-每三小时一次的时间戳序列



我希望每三个小时创建一个从特定日期开始到结束的时间戳序列。我尝试过的方法效果很好,但都有同样的问题。在序列中间的某个地方,PST到PDT之间有一个时间转换,我不知道为什么。以下是我尝试过的代码,类似于之前在这个网站上提出的问题(问题1和问题2):

 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]行,它从"2000-03-30 23:00:00 PST"变为"2000-03-31 02:00:00 PST",即3小时,但在第[13]行,它将从"2000-04-01 23:00:00 PST"变成"2000-04-02 03:00:00 PDT"。注意那里的时区变化。这在整个序列中都会发生。有什么办法避免这样的结果吗?我相信它会自动为我转换夏令时,这是我不想要的。如果我能把它保留为LST(当地标准时间),那就太好了。

更新:我最近发现了这个建议,我们只需将时区转换为"UTC"即可取消夏令时。它有效,只是将所有时间戳标记为UTC。然而,如果还有办法将其保留为LST,那就太好了。

如果您希望太平洋标准时间(PST)作为时区,而不希望切换到太平洋夏令时(PDT),为什么不指定呢?"America/Los Angeles"根据定义是指洛杉矶在特定时间有效的时区(包括夏令时开关)。。。

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"

建议使用UTC的参考问题指出,三个字母的时区代码可能不明确(例如,澳大利亚和北美都有东部标准时间,尽管该参考表明澳大利亚的时区代码被编码为AEST)。您当然应该小心仔细检查您的结果,因为以这种方式进行时区编码很有可能是特定于操作系统的。。。

请注意,在输出的第[1]行,它从"2000-03-30 23:00:00 PST"变为"2000-03-31 02:00:00 PST",即3小时,但在第[13]行,它将从"2000-04-01 23:00:00 PST"变成"2000-04-02 03:00:00 PDT"。

请注意,"2000-04-01 23:00:00 PST"至"2000-04-02 03:00:00 PDT"也是3小时。

如果您想要一个不遵守夏令时,但与当前当地时间的GMT偏移量相同的时区,那么您可以尝试?timezone:的时区名称部分中的建议

大多数平台都支持"GMT+n"one_answers"GMT-n"形式的时区,它们假设与UTC有固定的偏移量(因此没有夏令时)。

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"

最新更新