时区名称并不像您希望的那么简单。看http://en.wikipedia.org/wiki/Tz_database http://en.wikipedia.org/wiki/Tz_database用于背景和http://en.wikipedia.org/wiki/List_of_tz_database_time_zones http://en.wikipedia.org/wiki/List_of_tz_database_time_zones获取所使用的名称列表。到目前为止最好的办法是使用tz = 'country / city'
表示法并显式设置本地系统的时区。
因此,这是一个使用两种不同方法对时区进行编码的脚本:
Sys.setenv(TZ='GMT')
pst.abr <- as.POSIXct('2011-01-10 06:45:00', tz = 'PST')
est.abr <- as.POSIXct('2011-01-10 09:45:00', tz = 'EST')
pst.country.city <- as.POSIXct('2011-01-10 06:45:00', tz = 'America/Los_Angeles')
est.country.city <- as.POSIXct('2011-01-10 09:45:00', tz = 'America/New_York')
如果我们查看我们希望采用 PST 的 POSIXct 值,我们会发现它们实际上有两个不同的值。以缩写开头 (tz ='PST'
),你会得到这个:
> pst.abr
[1] "2011-01-10 06:45:00 UTC"
> as.numeric(pst.abr)
[1] 1294641900
您会看到我们使用定义的数据tz='PST'
实际上不在 PST 时区,但继承了系统的时区。
将其与我们使用国家\城市定义的数据进行比较:
> as.numeric(pst.country.city)
[1] 1294670700
> pst.country.city
[1] "2011-01-10 06:45:00 PST"
因此,只有我们用国家/城市信息显式编码的数据才具有正确的时区信息。