←
PDF 281 / 520 Sys.timezone() #> [1] "America/Los\Angeles"
→
English · PDF 281
Original PDF page 281
中文 · PDF 281

Sys.timezone() #> [1] "America/Los_Angeles"

(如果 R 不知道时区,你会得到一个 NA。)

还可以用 OlsonNames() 查看所有时区名称的完整列表:

length(OlsonNames()) #> [1] 589 head(OlsonNames()) #> [1] "Africa/Abidjan" "Africa/Accra" #> [3] "Africa/Addis_Ababa" "Africa/Algiers" #> [5] "Africa/Asmara" "Africa/Asmera"

在 R 中,时区是日期时间的一个属性,仅控制打印输出。例如,下面这三个对象表示的是同一时刻:

(x1 <- ymd_hms("2015-06-01 12:00:00", tz = "America/New_York")) #> [1] "2015-06-01 12:00:00 EDT" (x2 <- ymd_hms("2015-06-01 18:00:00", tz = "Europe/Copenhagen")) #> [1] "2015-06-01 18:00:00 CEST" (x3 <- ymd_hms("2015-06-02 04:00:00", tz = "Pacific/Auckland")) #> [1] "2015-06-02 04:00:00 NZST"

你可以用减法来验证它们是同一时间:

x1 - x2 #> Time difference of 0 secs x1 - x3 #> Time difference of 0 secs

除非另有说明,lubridate 总是使用 UTC。UTC(协调世界时)是科学界使用的标准时区,大致相当于其前身 GMT(格林尼治标准时间)。它没有夏令时,这使它成为一种便于计算的表示方式。组合日期时间的操作(如 c())通常会丢弃时区。在这种情况下,日期时间将以你的本地时区显示:

x4 <- c(x1, x2, x3) x4 #> [1] "2015-06-01 09:00:00 PDT" "2015-06-01 09:00:00 PDT" #> [3] "2015-06-01 09:00:00 PDT"

你可以通过两种方式更改时区:

  • 保持时间瞬间不变,只改变它的显示方式。当时间本身是正确的,但你想要更自然的显示时,可以使用这种方式: