r - 导入指定时区的日期时间,忽略夏令时

标签 r datetime timezone time-series dst

我从数据记录器获取了时间序列数据,该数据记录器设置为一个没有夏令时的时区(NZST 或 UTC+12:00),并且数据跨度数年。数据记录器不考虑 DST 更改,并且会同步到带/不带 DST 的本地时间(取决于部署者)。

但是,当我将数据输入R时,我无法正确使用as.POSIXct忽略夏令时。我在 Windows 计算机上使用 R 2.14.0,设置如下:

> Sys.timezone()
[1] "NZDT"
> Sys.getlocale("LC_TIME")
[1] "English_New Zealand.1252"

以下是 Spring DST 更改的三个时间戳,每个时间戳间隔 1 小时:

> ts_str <- c("28/09/2008 01:00", "28/09/2008 02:00", "28/09/2008 03:00")
> as.POSIXct(ts_str, format="%d/%m/%Y %H:%M", tz="")
[1] "2008-09-28 01:00:00 NZST" NA
[3] "2008-09-28 03:00:00 NZDT"
> as.POSIXct(ts_str, format="%d/%m/%Y %H:%M", tz="UTC")
[1] "2008-09-28 01:00:00 UTC" "2008-09-28 02:00:00 UTC"
[3] "2008-09-28 03:00:00 UTC"

正如您所看到的,时钟从 1:59 向前跳到 3:00,因此 2:00 无效,因此 NA。此外,我可以使用tz="UTC"让它忽略 DST 更改。但是,我宁愿保留正确的时区,因为我还想混合其他用 DST(NZDT 或 UTC+13:00)记录的数据系列(通过 merge )供我分析。

如何配置 tz MS Windows 计算机上的参数?我尝试过很多东西,例如“NZST”、“新西兰标准时间”、“UTC+12:00”、“+1200”等,但没有运气。或者我是否需要修改其他一些设置?

最佳答案

您可以使用tz="Etc/GMT+12":

as.POSIXct(ts_str, format="%d/%m/%Y %H:%M", tz="Etc/GMT+12")
[1] "2008-09-28 01:00:00 GMT+12" "2008-09-28 02:00:00 GMT+12"
[3] "2008-09-28 03:00:00 GMT+12"

有关可用时区的完整列表,

dir(file.path(R.home("share"),"zoneinfo"), recursive=TRUE)

其中有几个 .tab 文件不是时区,但包含一些信息,但我的 regex-fu 不够好,无法使用 dir< 的模式参数排除它们.

关于r - 导入指定时区的日期时间,忽略夏令时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8004050/

相关文章:

r - geom_text 如何根据需要在栏上定位文本?

python - 如何迭代数据框中的日期?

java - String.format 打印错误的时间

ruby-on-rails - 在 9 :00 AM in their Local Time Zone 向用户发送时事通讯

python - 将 pytz 导入 AWS lambda 函数

r - 如何在雷达图中放置 Y 轴值

r - 使用下载处理程序将 ggplot 图像保存为 Shiny 的

r - ggplot stacked bar - 隐藏标签但保留标签定位

javascript - JSON Stringify 因 UTC 而更改日期时间

java - 将日期字符串转换为 Java 中的特定日期格式 "dd-MM-yyyy"