Date

如何在 R 中處理時間戳中的時區?

  • May 7, 2017

我在瑞典時區 (UTC+1) 的 2016 年 8 月 17 日 21:41 給出了非 UTC 時區時間。每個條目我都有兩個這樣的錄音。我正在考慮如何將它們很好地記錄在 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"

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
$ 

引用自:https://unix.stackexchange.com/questions/363271