首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >当我们转换为夏令时和夏令时时处理日期

当我们转换为夏令时和夏令时时处理日期
EN

Stack Overflow用户
提问于 2012-12-14 01:24:57
回答 3查看 12.8K关注 0票数 13

我想使用R进行时间序列分析。我想创建一个时间序列模型,并使用timeDate和forecast包中的函数。

我有CET时区的日内数据(15分钟数据,每小时4个数据点)。在3月31日实施夏令时,我丢失了我通常拥有的96个数据点中的4个。10月28日,我有4个数据点太多了,因为时间被调回了。

对于我的时间序列模型,我总是需要96个数据点,否则一天中的季节性就会变得混乱。

你有这方面的经验吗?您是否知道一个R函数或包将有助于自动处理此类数据--某种优雅的东西?谢谢!

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-12-14 03:29:13

来自传感器的水文数据也有类似的问题。我的时间戳使用的是UTC+1 (CET),并没有转换为夏令时(UTC+2,CEST)。因为我不想让我的数据间隔一个小时(如果使用协调世界时就是这种情况),所以我采用了strptime%z转换规范。在?strptime中,您可以找到:

%z已签署的时差为协调世界时的小时和分钟,so -0800比协调世界时晚8小时。

例如: 2012年,从标准时间到DST的转换发生在2012-03-25,所以这一天没有02:00。如果您尝试将"2012-03-25 02:00:00“转换为POSIXct对象,

代码语言:javascript
运行
复制
> as.POSIXct("2012-03-25 02:00:00", tz="Europe/Vienna")
[1] "2012-03-25 CET"

您不会收到错误或警告,您只会得到日期而不是时间(这种行为已记录在案)。

使用format = "%z"可以得到所需的结果:

代码语言:javascript
运行
复制
> as.POSIXct("2012-03-25 02:00:00 +0100", format="%F %T %z", tz="Europe/Vienna")
[1] "2012-03-25 03:00:00 CEST"

为了便于导入,我编写了一个带有适当默认值的小函数:

代码语言:javascript
运行
复制
as.POSIXct.no.dst <- function (x, tz = "", format="%Y-%m-%d %H:%M", offset="+0100", ...)
{
  x <- paste(x, offset)
  format <- paste(format, "%z")
  as.POSIXct(x, tz, format=format, ...)
}

> as.POSIXct.no.dst(c("2012-03-25 00:00", "2012-03-25 01:00", "2012-03-25 02:00", "2012-03-25 03:00"))
[1] "2012-03-25 00:00:00 CET"  "2012-03-25 01:00:00 CET"  "2012-03-25 03:00:00 CEST"
[4] "2012-03-25 04:00:00 CEST"
票数 17
EN

Stack Overflow用户

发布于 2012-12-14 01:32:35

如果你不想要夏令时,可以转换成没有夏令时的时区(例如,GMT,UTC)。

代码语言:javascript
运行
复制
times <- .POSIXct(times, tz="GMT")
票数 14
EN

Stack Overflow用户

发布于 2015-08-20 20:58:02

下面是获取夏令时偏移量的示例-例如,中部夏令时

代码语言:javascript
运行
复制
> Sys.time()

"2015-08-20 07:10:38 CDT“#我在美国/芝加哥夏令时

代码语言:javascript
运行
复制
> as.POSIXct(as.character(Sys.time()), tz="America/Chicago")

"2015-08-20 07:13:12 CDT“

代码语言:javascript
运行
复制
> as.POSIXct(as.character(Sys.time()), tz="UTC") - as.POSIXct(as.character(Sys.time()), tz="America/Chicago")

时差-5小时

代码语言:javascript
运行
复制
> as.integer(as.POSIXct(as.character(Sys.time()), tz="UTC") - as.POSIXct(as.character(Sys.time()), tz="America/Chicago"))

-5

一些灵感来自于

Converting time zones in R: tips, tricks and pitfalls

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13865172

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档