如何在 R 中处理时间戳中的时区?

如何在 R 中处理时间戳中的时区?

我给出的非 UTC 时区时间为 2016 年 8 月 17 日 21:41,瑞典时区 (UTC+1)。每个条目我都有两个这样的录音。我正在考虑如何将它们很好地记录在 CSV 文件中。我首先想到将它们手动转换为 Unix 时间戳,但后来开始考虑将原始时区等170820162141与时区的单独列一起维护。但我仍然认为这些版本并不是任何标准。我确实知道如何基于线程生成 Unix 时间戳如何生成 Unix 时间戳?以下命令结构也可以在这里工作。

% https://stackoverflow.com/a/2764285/54964
date -j -f "%a %b %d %T %Z %Y" "`date`" "+%s"

我将用R// Bash/ Zsh.... 读取 CSV 文件 我的建议

  • 自定义时间标记等前一种,例如170820162141没有秒
  • 时区等的单独列UTC+1

CSV 文件示例

Time_start, Time_end, Time_start_timezone
170820162141, 180820160901, UTC+1

测试函数伪代码

Count time difference between two custom timestamps.  

迭代thrig的提案

我将数据更改为

  1. 在 中添加时区+0100(UTC+1) , , , 03012011-2011+0100, 03022011-2011+0100
  2. 格式化strptime(from,format="%d%m%Y-%H%M%z我添加的%z时区。
  3. data如果给定数据的时区设置正确,则打印会正确显示所有时间。

代码在五列数据上运行Rscript script.r,其中时间数据在最后两列

library('methods')
# https://unix.stackexchange.com/a/363290/16920
setClass('iso8601')

#03012011-2011
setAs("character","iso8601",function(from) strptime(from,format="%d%m%Y-%H%M%z"))
data <- read.csv("/home/masi/Documents/Data/log.csv", colClasses=c(NA, NA, NA, "iso8601","iso8601"), header=TRUE) # my particular case

data

输出:完美!我必须根据我的数据正确调整时区,因为我的时区经常变化。

  • 没有library('methods'),你得到Rscript Error: could not find function "setClass"

答案1

ISO 8601 是一种可能的格式;它可以包含时区偏移量,并且可以用strptime多种语言进行解析。

$ cat x
2017-05-05T18:25:28+0100,2017-05-05T18:33:22+0100,foo
2017-05-05T18:34:21+0100,2017-05-05T18:38:52+0100,bar
$ R -q --silent --no-save
> R.version.string
[1] "R version 3.4.0 (2017-04-21)"
> setClass('iso8601')
> setAs("character","iso8601",function(from) strptime(from,format="%Y-%m-%dT%H:%M:%S%z"))
> data=read.csv("x",colClasses=c("iso8601","iso8601",NA),header=FALSE)
> data
                   V1                  V2  V3
1 2017-05-05 17:25:28 2017-05-05 17:33:22 foo
2 2017-05-05 17:34:21 2017-05-05 17:38:52 bar
> 

等等date可以生成 ISO 8601 格式的日期:

$ date "+%Y-%m-%dT%H:%M:%S%z"
2017-05-05T19:20:58+0000
$ TZ=US/Pacific date "+%Y-%m-%dT%H:%M:%S%z"
2017-05-05T12:21:10-0700
$ 

相关内容