由DateTime偏移混淆

时间:2014-02-26 23:47:01

标签: r datetime-format

我正在尝试理解如何解释GMT偏移,以便我可以使用R中的datetime对象。例如,假设我有一个日期时间,如“2011-04-04 10:45:00 GMT + 10”

问题1:我应该将其视为格伦威治时间并增加10小时才能获得当地时间吗?或者是当地时间,我需要减去10小时才能获得GMT?我一直都明白这是后者。

Q2:为什么R似乎使用前者的解释?例如

foo <- as.POSIXct("2011-04-04 10:45:00", tz="Etc/GMT+10")
attr(foo, "tzone") <- "GMT"
foo
[1] "2011-04-04 20:45:00 GMT"

咦?我期待“2011-04-04 00:45:00 GMT”

编辑:更令人困惑的是!如果我使用国家/城市而不是GMT偏移指定时区,结果会有所不同。

foo <- as.POSIXct("2011-04-04 10:45:00", tz="Australia/Sydney")
foo
[1] "2011-04-04 10:45:00 EST"
attr(foo, "tzone") <- "GMT"
foo
[1] "2011-04-04 00:45:00 GMT"

什么?哎呀!为什么??

2 个答案:

答案 0 :(得分:0)

as.POSIXct的帮助页面说明发生了什么是系统特定的。在Mac上我得到:

> as.POSIXct("2011-04-04 10:45:00", tz="Etc/GMT+10")
[1] "2011-04-04 10:45:00 GMT+10"
> as.POSIXct("2011-04-04 10:45:00", tz="Australia/Sydney")
[1] "2011-04-04 10:45:00 EST"

(这可能是澳大利亚东部,而不是美国的东海岸,更准确地输入'EST5EDT'。)我认为你会发现用as.POSIXct.numeric这样做会给你一个价值格林威治标准时间的起源,除非你特别小心,否则会让你挠头。 ?Sys.timezone中描述了查找有效TZ的方法。

答案 1 :(得分:0)

GMT + 10实际上意味着使用“POSIX Style Signs”从GMT开始减去 10小时。

来自:https://www.ietf.org/timezones/data/etcetera

# We use POSIX-style signs in the Zone names and the output abbreviations,
# even though this is the opposite of what many people expect.
# POSIX has positive signs west of Greenwich, but many people expect
# positive signs east of Greenwich.  For example, TZ='Etc/GMT+4' uses
# the abbreviation "GMT+4" and corresponds to 4 hours behind UT
# (i.e. west of Greenwich) even though many people would expect it to
# mean 4 hours ahead of UT (i.e. east of Greenwich).