`difftime`中可能存在的错误-在R中计算日期时间的差异[重复]

Posted

技术标签:

【中文标题】`difftime`中可能存在的错误-在R中计算日期时间的差异[重复]【英文标题】:Possible bug in `difftime` - calculating difference in date time in R [duplicate] 【发布时间】:2018-10-30 02:51:18 【问题描述】:

我正在计算两个日期时间的差异,使用 R 中的 difftime 函数并得到错误答案,这是代码

t1 <- as.POSIXct("7/18/2005 8:30:00", format = "%m/%d/%Y %H:%M:%S")
t2 <- as.POSIXct("10/30/2005 8:30:00", format = "%m/%d/%Y %H:%M:%S")
difftime(t2,t1,units = "hours") 

我得到以下答案

Time difference of 2497 hours

我知道这是错误的,因为 t1t2 具有相同的 time 值,因此它们应该以 24 小时的精确倍数分隔(即正确答案是 2496 小时,而不是 2497 - 也通过其他工具(如 excel、google 表格)确认。

任何想法,为什么R 给我错误的结果?

【问题讨论】:

由于 2005 年 10 月 30 日星期日 02:00:00 夏令时转换,您获得了一个小时。您可以看到 2005 年 10 月 29 日和 2005 年 10 月 30 日之间的差异是 25 小时 @smci 是正确的。使用tz="UTC" 将解决问题。 不一定是错的,这取决于这应该是什么时区。但 UTC 让事情变得明确。 @smci,谢谢!这是我的代码中的一个微妙错误! 相关:POSIXct times around DST?,还有213 questions about [r] DST。这可能是重复的 【参考方案1】:

由于夏令时转换(2005 年 10 月 30 日星期日 02:00:00),您增加了一个小时

您可以通过 as.POSIXct(..., tz = 'UTC') 使用它应该是的任何时区来修改它; UTC 使事情变得明确并避免 DST 更改。

如果您想修改所有as.POSIXct() 调用的默认时区,请参阅How to change the default time zone in R?,它建议:

[作为 R 命令]Sys.setenv(TZ='GMT') 或 [R 设置文件] 将TZ="UTC"编辑成Renviron.site

【讨论】:

以上是关于`difftime`中可能存在的错误-在R中计算日期时间的差异[重复]的主要内容,如果未能解决你的问题,请参考以下文章

R 添加到 difftime 向量会忘记单位

两个日期之间的月数

r语言errorinparseblock

c语言中difftime(end,start)函数可被end-start表达式所取代吗? 我测试了几组数,貌似是可以的。有知道的

失拟P值怎么计算

在R中合并具有重复的配对列