我需要编写一些代码,将世界上不同用户的数据时间从其他时区转换为本地。
函数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数据集方法库
答案 0 :(得分:2)
“EST”含糊不清。对于US-EST来说,“EST5EDT”有点不那么模糊。你没有提到你的操作系统,你应该有。 /usr/share/zoneinfo
文件位于设备的某个位置,如果它是NIX变体,并且该文件具有“官方国家/城市”名称。如果GMT+10
或GMT-5
或GMT+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