如何在R中更改默认时区?

73

如何在R中更改默认时区?我正在处理时间序列。所有我的时间序列都定义在UTC时区,但是如果我打印日期,它总是以CET / CEST时区显示。

```R # 将默认时区设置为 UTC Sys.setenv(TZ='UTC')
# 检查时区是否已更改 Sys.timezone() ```

你有阅读过 ?timezone 并尝试其中的任何内容吗? - Joshua Ulrich
我有一个类似的问题,需要快速解决。我使用了适用于R语言的Jupyter。它可能是设置为UTC时间区。 - user3624251
4个回答

102

另一种无需更改整个计算机时间的方法是使用setenv命令,像这样:Sys.setenv(TZ='GMT')


4
在 Mac 上,当您重置 R 会话时,这个问题似乎就消失了,回到了“”状态。 - Jas
4
对于其他地区,您可以使用此时区列表。我使用了Sys.setenv(TZ = "America/Sao_Paulo"),效果很好。 - Murta
3
没错,R 会话不会(也不应该)保存进程环境。对于那些依赖于保存/恢复会话的人来说,需要采取另一种方法。 - DomQ

13

在R中更改时区,请参阅这篇好文章:

http://blog.revolutionanalytics.com/2009/06/converting-time-zones.html

简要概述(以防将来链接不可用):

# your time string
pb.txt <- "2009-06-03 19:30"
# convert it to R object for London time zone
pb.date <- as.POSIXct(pb.txt, tz="Europe/London")
# convert it to PDT time zone
format(pb.date, tz="America/Los_Angeles",usetz=TRUE)
[1] "2009-06-03 11:30:00 PDT"

# can be also done for many date at once
d <- c("2009-03-07 12:00", "2009-03-08 12:00", "2009-03-28 12:00", "2009-03-29 12:00", "2009-10-24 12:00", "2009-10-25 12:00", "2009-10-31 12:00", "2009-11-01 12:00")
t1 <- as.POSIXct(d,"America/Los_Angeles")
cbind(US=format(t1),UK=format(t1,tz="Europe/London"))

     US                    UK                   
[1,] "2009-03-07 12:00:00" "2009-03-07 20:00:00"
[2,] "2009-03-08 12:00:00" "2009-03-08 19:00:00"
[3,] "2009-03-28 12:00:00" "2009-03-28 19:00:00"
[4,] "2009-03-29 12:00:00" "2009-03-29 20:00:00"
[5,] "2009-10-24 12:00:00" "2009-10-24 20:00:00"
[6,] "2009-10-25 12:00:00" "2009-10-25 19:00:00"
[7,] "2009-10-31 12:00:00" "2009-10-31 19:00:00"
[8,] "2009-11-01 12:00:00" "2009-11-01 20:00:00"

10

操作系统是什么?

一般而言,你可以通过help(Startup) 来设置值,通过 .Renviron 以及其站点级变体进行设置。

但是你可能需要为整个计算机设置此项,在Linux下可能会更改文件/etc/timezone ,而在Windows上,则需要设置一个系统范围的环境变量TZ

最后,如果你的日期和时间的格式显示为 CET/CEST,那么这可能已经是系统默认设置了,你的问题实际上是如何在R对象中正确地设置UTC时间。


我已经更改了我的Windows配置。我还不得不在R中更改R环境变量TZ,就像这样:TZ="UTC"。谢谢您的帮助。 - Paul PUGET

7
我发现 @Dirk 的Ubuntu答案非常有用,因此我想进一步扩展它。
help(Startup) 我们可以看到环境变量由 Renviron.site 文件设置:

除非在命令行上给出了 --no-environ,否则 R 会搜索站点和用户文件以处理设置环境变量。站点文件的名称是由环境变量 R_ENVIRON 指向的文件;如果未设置,则使用 'R_HOME/etc/Renviron.site'

我们可以使用函数 R.home() 找到 R_HOME 的路径,在我的情况下返回:
> R.home()
[1] "/usr/lib/R"

因此,对于我来说,Renviron.site 文件位于 /usr/lib/R/etc/ 中。只需打开该文件,并插入以下行:
TZ="UTC"

或类似的。

这是一个关于在R中“永久”设置时区的绝妙答案。但我不明白的是:为什么它会显示这个消息?我的R版本是v3.4.2,运行在macOS High Sierra系统上。 - Sander W. van der Laan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接