r - 如何获取带有城市名称的系统时区?

标签 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 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+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

转换输出

关于r - 如何获取带有城市名称的系统时区?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20089822/

相关文章:

r - 在 R 中转换日期返回 NA

使用 rvest 和 V8 进行 R Web 抓取

rbind data.frames 列表,同时在 R 中保留 NULL 元素

r - 从 sys.time 中获取数字

r - 交互式悬停 Shiny 图表

R 十六进制颜色在 ggvis 中不起作用

r - 将数据从 PostgreSQL 加载到 R 的最快方法

r - 灵敏度错误::fast99: “' ‘必须是字符串或函数”

r - R 中的因子水平默认为 1 和 2 |虚拟变量

r - bsTooltip 中的数学模式 Shiny