我需要编写一些代码来为世界上不同的用户将数据时间从其他时区转换为本地时间。
函数 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 version 3.0.2 (2013-09-25) Platform: x86_64-w64-mingw32/x64 (64-bit)
语言环境:
[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 datasets 方法基础
最佳答案
正如您所指出的,“EST”含糊不清。 “EST5EDT”对于 US-EST 来说不那么模糊。你没有提到你的操作系统,你应该有。 /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
关于r - 如何获取带有城市名称的系统时区?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20089822/