R strptime/as.POSIXct中的未知时区名称

aha*_*ala 27 timezone r strptime

在哪里可以找到R函数的所有合法时间名称列表as.POSIXct

as.POSIXct("1970-01-01",tz="CST") 生成"CST"(中央标准时间)未知的警告.

Rap*_*ter 25

时区的东西可以驱动你坚果!

位于德国,这是我以前设置我的tz:

> options(tz="Europe/Berlin")
Run Code Online (Sandbox Code Playgroud)

这样做,我总是想知道为什么R会抛出"未知时区"警告:

> t <- "2011-11-08 09:42:00"
> as.POSIXct(t, tz=getOption("tz"))
[1] "2011-11-08 09:42:00 CET"
Warning messages:
1: In strptime(xx, f <- "%Y-%m-%d %H:%M:%OS", tz = tz) :
  unknown timezone 'MET-1MST'
2: In as.POSIXct.POSIXlt(x) : unknown timezone 'MET-1MST'
3: In strptime(x, f, tz = tz) : unknown timezone 'MET-1MST'
4: In as.POSIXct.POSIXlt(as.POSIXlt(x, tz, ...), tz, ...) :
  unknown timezone 'MET-1MST'
5: In as.POSIXlt.POSIXct(x, tz) : unknown timezone 'MET-1MST'
Run Code Online (Sandbox Code Playgroud)

有一天我发现设置tz via options()是不够的,因为环境变量TZ不受影响因此所有的麻烦:

> Sys.getenv("TZ")
[1] "MET-1MST"
Run Code Online (Sandbox Code Playgroud)

改变这一点应该消除令人讨厌的警告:

> Sys.setenv(TZ="Europe/Berlin")
> Sys.getenv("TZ")
[1] "Europe/Berlin"
> as.POSIXct(t, tz=getOption("tz"))
[1] "2011-11-08 09:42:00 CET"
Run Code Online (Sandbox Code Playgroud)


Jos*_*ich 21

?Sys.timezone有一些提示,具体看在:"R_HOME/share/zoneinfo/zone.tab"(R_HOME在目录R为安装在).请记住,时区是令人讨厌的,他们的许多细微差别是特定的操作系统(和区域设置?).

在您的具体情况下,您想要"CST6CDT"而不是"CST".

  • 是的,或者您可以使用"zones.tab"文件中定义的"America/New_York".正如我所说,令人讨厌...... (2认同)

42-*_*42- 8

无法在我的make上的那个位置找到它,但在源目录中找到了一个压缩版本.以下是出现在zones.tab文件顶层的时区缩写列表:

CET, CST6CDT, Cuba, EET, EST, EST5EDT, Egypt, Eire, Factory, GB, GB-Eire, GMT,
GMT+0, GMT-0, GMT0, Greenwich, HST, Hongkong, Iceland, Iran, Israel, Jamaica, Japan,
Kwajalein, Libya, MET, MST, MST7MDT, NZ, NZ-CHAT, Navajo, PRC, PST8PDT, Poland, Portugal,
ROC, ROK, Singapore, Turkey, UCT, UTC, Universal, W-SU, WET, Zulu
Run Code Online (Sandbox Code Playgroud)

还有一些带有大陆/国家/地区名称的文件夹,它们有更多选项,America/New_York例如上面的示例:

Africa/     Asia/       Canada/     Indian/
America/    Atlantic/   Chile/      Mexico/
Antarctica/ Australia/  Etc/        Pacific/
Arctic/     Brazil/     Europe/     US/
Run Code Online (Sandbox Code Playgroud)

这是在/R-2.11.1/src/extra/tzone/zoneinfo.zip文件中找到的.


mma*_*123 8

大多数R平台使用由David Olson编译的时区数据库,其中首选参考是按位置.名字有点过时,但它们会帮助你开始.

查找可用时区的完整列表(在Windows上不起作用):

OlsonNames()
Run Code Online (Sandbox Code Playgroud)

对于运行Windows的人来说OlsonNames()不起作用:请在此处查看完整列表.

或者在这里更详细地阅读http://www.twinsun.com/tz/tz-link.htm

  • 适用于我的Windows,Windows Server 2012和Windows 10. (2认同)