1

我在 csv 文件中有日期时间对,看起来像

2012 年 11 月 4 日

在一列和

上午 12:06:08

在相邻的列中。它们以本地时间记录(即它们在适当的时间切换到 PST 和 PDT),但文件中没有 tz 或 DST 指示符。检测到这一点的唯一可见方法是时间序列做了有趣的事情。例如,在 2012 年 11 月 4 日,我有一系列时间,例如

12:51:20 AM 1:13:08 AM 1:24:58 AM 1:40:28 AM 1:48:08 AM 1:54:08 AM 1:56:58 AM 1:04:28 AM 1: 05:48 AM 1:07:18 AM 1:15:00 AM 1:39:08 AM 2:05:38 AM

PST 大概从凌晨 1:04:28 读数开始,但没有指示符。

是否有一种简单的方法来正确分配时区(大概使用 lubridate)?该文件很长,所以我不想一次循环阅读一个读数,因为我担心这可能需要一些时间。我必须在春天做同样的事情。

4

1 回答 1

1

这是不可能的。没有办法确切地知道是 PST而不是PDT"11/4/2012 1:04:28 AM"之间的实际观察。"11/4/2012 12:51:20 AM""11/4/2012 1:13:08 AM"

如果您确定观察结果在文件中是有序的,您可以将它们转换为向量POSIXt并获取diff向量。任何负值都将是 DST 更改。但是,如果 DST 更改中的两次观察之间的时间大于 1 小时,您可能会错过一些。

Lines <- "11/4/2012 12:51:20 AM
11/4/2012 01:13:08 AM
11/4/2012 01:24:58 AM
11/4/2012 01:40:28 AM
11/4/2012 01:48:08 AM
11/4/2012 01:54:08 AM
11/4/2012 01:56:58 AM
11/4/2012 01:04:28 AM
11/4/2012 01:05:48 AM
11/4/2012 01:07:18 AM
11/4/2012 01:15:00 AM
11/4/2012 01:39:08 AM
11/4/2012 02:05:38 AM"

x <- scan(con <- textConnection(Lines), what="", sep="\n")
close(con)
diff(strptime(x, format="%m/%d/%Y %I:%M:%S %p"))
# Time differences in mins
#  [1]  21.800000  11.833333  15.500000   7.666667   6.000000   2.833333
#  [7] -52.500000   1.333333   1.500000   7.700000  24.133333  86.500000
于 2013-02-22T12:59:29.683 回答