POSIXct时区如何在R中工作

Bry*_*mas 5 timezone r posixct

我有一组标准的unix整数时间戳,全部是UTC(GMT),我正在输入我希望绘制的R.我一直在使用表单的代码:

d$date_time <- as.POSIXct(d$date_time,origin="1970-01-01",tz="GMT")

将我的标准unix时间戳UTC整数列转换为我假设的某种可绘制对象集.我可以绘制这个并且数据看起来很好,但我不知道我的所有数据是否都被我的计算机的本地时区或任何其他时区调整以任何方式偏移.这是因为我不明白在a)我进行调用时对数据进行了哪些调整(如果有的话),as.POSIXct()以及b)在绘制数据时.所以这些是我的问题:

  1. 当我tz="GMT"在上面指定时,这究竟是什么告诉计算机呢?我看到三种可能性:i)"您的数据是GMT,您希望它转换为您当地时间"ii)"您的数据始终假定为当地时间,您希望它转换为GMT"iii)"您的数据始终是假设是格林尼治标准时间,你希望我把它留在GMT,所以不要做任何调整".
  2. 当我绘制数据(有xyplot)时,绘图功能是否对时间进行任何视觉调整?如果是这样,有什么调整?

我想如果有人能够解释内部数据结构如何存储时区信息以及如何通过各种命令转换这些数据结构,它将有助于清理问题.基本上,我想从开始使用UTC直到显示点,我可能希望对时区进行调整,尽管理想情况下明确而不是计算机默默地为我决定.

Dir*_*tel 6

R的日期和时间类非常强大,但它们需要一些时间来适应.特别是TZ调整很棘手,但它们与特征的构造和转换有关.

请考虑以下示例,该示例将自身限制为输入的数字.我们有很好的控制权:

R> tt <- as.POSIXct(0, origin="1970-01-01")
R> str(tt)
 POSIXct[1:1], format: "1970-01-01"
R> tt
[1] "1970-01-01 CST"
R> 
R> tt <- as.POSIXct(600, origin="1970-01-01")
R> tt
[1] "1970-01-01 00:10:00 CST"
R> 
tt <- as.POSIXct(600, origin="1970-01-01", tz="UTC")
R> tt
[1] "1970-01-01 00:10:00 UTC"
R> 
R> as.numeric(tt)
[1] 600
R> 
Run Code Online (Sandbox Code Playgroud)

您可以获得整个日期算术,转换difftime()等,并且仍然可以传递纯数值.也:

R> tt <- as.POSIXct(600, origin="1970-01-01", tz="UTC")
R> tt
[1] "1970-01-01 00:10:00 UTC"
R> tt2 <- tt + 1.234567
R> tt2
[1] "1970-01-01 00:10:01.234566 UTC"
R> 
Run Code Online (Sandbox Code Playgroud)

您可以attributes()用来检查是否已设置TZ:

R> attributes(tt)
$tzone
[1] "UTC"

$class
[1] "POSIXct" "POSIXt" 

R> 
Run Code Online (Sandbox Code Playgroud)

因此,如果您对创建和转换非常小心,您确实可以拥有基于UTC的时间数据的完整工具包.