我在R中有一系列字符时间戳。当我使用直观的方法将他们的类更改为POSIXct
时,R 会分配不明确的时区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
标签。它被提及,但在 R ?timezone
帮助中没有完全解释。将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+n
或Etc/GMT-n
表示法,请注意?timezone
的以下警告:
许多系统支持 GMT+n 和 GMT-n 形式的时区,它们是 与 UTC 的固定偏移量(因此没有 DST)。与某些用法相反(但是 与 PST8PDT) 等名称一致,负偏移量是时间 在 UTC 之前(以东),正偏移量是落后于(以西)的时间 世界协调时。
第一个示例中的第一行和第三行生成相同的输出,因为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"