6

我在 R 中有一系列字符时间戳。当我将他们的类更改为POSIXct使用直观方法时,R 分配了模棱两可的 timezone EST

例如:

as.POSIXct("2012-08-06 15:32:00") 
as.POSIXct("2012-08-06 15:32:00", tz = "Australia/Brisbane") 
as.POSIXct("2012-08-06 15:32:00", tz = "") 

在我的两个(Mac 和 Windows)盒子上都产生相同的输出:

"2012-08-06 15:32:00 EST"

这里的问题EST可能是任何数量的时区:美国东部标准时间,或澳大利亚东部标准时间,或加拿大的另一个时区(来自?timezone):

请注意,其中一些名称可能与您的想法不同:特别是 EST 是加拿大使用的时区,没有夏令时,而不是 EST5EDT 或(澳大利亚)东部标准时间。

有一种设置时区的方法可以避免使用此EST标签。?timezone它在 R帮助中被提及,但没有完全解释。设置 x 为澳大利亚新闻机构报道的好奇号登陆火星的时间:

x <- as.POSIXct("2012-08-06 15:32:00", tz = "Etc/GMT-10")
x
"2012-08-06 15:32:00 GMT-10"

我们可以通过将其转换为美国时区并查看加利福尼亚新闻报道来测试这是否正确:

y <- format(x, tz = "America/Los_Angeles")
y
"2012-08-05 22:32:00"

如果使用此Etc/GMT+nEtc/GMT-n表示法,请注意以下警告?timezone

许多系统支持 GMT+n 和 GMT-n 形式的时区,它们与 UTC 有固定的偏移量(因此没有 DST)。与某些用法相反(但与 PST8PDT 等名称一致),负偏移量是 UTC(以东)UTC 之前的时间,正偏移量是 UTC(以西)UTC 的时间。

4

1 回答 1

6

第一个示例中的第 1 行和第 3 行产生相同的输出,因为tz=""它是as.POSIXct. 第二行更有趣,因为时区是明确定义的。

但请注意,这"EST"只是默认情况下打印时区的方式。该tzone属性仍然是明确的。

R> x <- as.POSIXct("2012-08-06 15:32:00", tz="Australia/Brisbane")
R> x
[1] "2012-08-06 15:32:00 EST"
R> attr(x, "tzone")
[1] "Australia/Brisbane"
于 2012-08-13T02:46:59.890 回答