You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

关于R语言base包difftime函数返回非整数值的疑问

R语言difftime返回非整数值的原因解析

你遇到的非整数结果,核心原因是传入的日期字符串被默认转换为带本地时区的POSIXct对象,而夏令时(DST)切换会导致实际小时数不是24的整数倍,最终换算成天就出现了小数。

具体案例分析

  • 第一个例子:2014年10月部分地区(如北美、欧洲)会结束夏令时,时钟调慢1小时,导致那段时间内的总小时数比8天×24小时多1小时。193小时÷24≈8.041667天,对应你得到的结果。
  • 第二个例子:2020年3月部分地区开启夏令时,时钟调快1小时,那段时间的总小时数比7天×24小时少1小时。143小时÷24≈6.958333天,和你的输出一致。

官方文档说明(翻译)

注意:units = "days"代表24小时的时间段,因此不考虑夏令时。但Date类对象的差值计算会假设处于UTC时区。

解决方法

要得到整数天数,有两种常用方式:

  • 将日期字符串转换为Date类对象后计算(Date类默认基于UTC时区,不受夏令时影响):
difftime(as.Date("2014-10-29"), as.Date("2014-10-21"), units = "days")
# Time difference of 8 days
difftime(as.Date("2020-4-04"), as.Date("2020-3-28"), units = "days")
# Time difference of 7 days
  • 转换为POSIXct时指定UTC时区:
difftime(as.POSIXct("2014-10-29", tz="UTC"), as.POSIXct("2014-10-21", tz="UTC"), units = "days")
# Time difference of 8 days

内容的提问来源于stack exchange,提问作者Marius

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 02:15:50