如何使用城市名称获取系统时区?

时间:2013-11-20 07:25:25

标签: r

我需要编写一些代码,将世界上不同用户的数据时间从其他时区转换为本地。

函数Sys.timezone()将返回带有三个字符的缩写。例如,

> Sys.timezone() 
"EST"

EST代表东部标准时间(-5),但我的电脑实际上是澳大利亚东部标准时间(AEST,+ 10,澳大利亚/布里斯班)。此代码将返回错误的结果

> as.POSIXct(as.numeric(Sys.time()), origin = '1970-1-1', tz = Sys.timezone())
"2013-11-20 02:17:12 EST"

实际时间是

  

Sys.time()       " 2013-11-20 17:17:12 EST"

我的问题是如何使用国家/城市名称获取系统时区?

PS:为什么R在东部标准时间(-5)和澳大利亚东部标准时间(+10)使用EST?

  

sessionInfo()   R版本3.0.2(2013-09-25)   平台:x86_64-w64-mingw32 / x64(64位)

区域设置: [1] LC_COLLATE = English_Australia.1252 LC_CTYPE = English_Australia.1252
[3] LC_MONETARY = English_Australia.1252 LC_NUMERIC = C
[5] LC_TIME = English_Australia.1252

附加基础包: [1] stats graphics grDevices utils数据集方法库

1 个答案:

答案 0 :(得分:2)

你指出,

“EST”含糊不清。对于US-EST来说,“EST5EDT”有点不那么模糊。你没有提到你的操作系统,你应该有。 /usr/share/zoneinfo文件位于设备的某个位置,如果它是NIX变体,并且该文件具有“官方国家/城市”名称。如果GMT+10GMT-5GMT+10:00适用于您的设备,我认为这是最简单的,但目前为止您无法确定这些内容。这是我在搜索示例创建的R对象时得到的结果:

 ?Sys.timezone

 tzones$name[ grep("Brisbane", tzones$name) ]
[1] "Australia/Brisbane"

我的设备返回:

> Sys.timezone() 
[1] ""   # so I'm guessing you are not on a Mac.

到你的PS:你需要询问你的操作系统的制造商。 R只使用设计你系统的人的设施。

你应该注意strptime不会在输入时转换TZ。另一方面,您可以使用strftime

转换输出