R语言计算两个日期的分钟时间差返回错误结果
解决difftime计算日期差不符合预期的问题
哦,这个问题我之前踩过坑!问题根源在于时区的隐式转换——虽然你在日期字符串里写了GMT,但R的as.POSIXct默认不会把这个当作时区标记,而是会用你本地的时区来解析存储这些时间,导致计算出的差值完全不对。
先复现你的问题
运行你给出的代码:
date1 = as.POSIXct("2017-04-12 17:10:59 GMT") date2 = as.POSIXct("2017-04-12 01:56:00 GMT") difftime(date1, date2, units = "mins")
假设你的本地时区是UTC+8(比如北京时间),R会把这两个GMT时间转换为本地时区:
- date1变成
2017-04-13 01:10:59 CST - date2变成
2017-04-12 09:56:00 CST
此时计算两者的时间差,正好是你得到的914.9833 mins——这是本地时区下的差值,而非GMT时区的真实差值。
解决方案:明确指定时区
要让R正确识别GMT时区,必须在as.POSIXct中通过tz参数明确指定,而不是仅在字符串里标注GMT。修正后的代码如下:
# 明确指定tz="GMT",确保时间按GMT时区解析存储 date1 <- as.POSIXct("2017-04-12 17:10:59", tz = "GMT") date2 <- as.POSIXct("2017-04-12 01:56:00", tz = "GMT") # 计算时间差 difftime(date1, date2, units = "mins")
运行这段代码会得到:
Time difference of 194.9833 mins
这个结果和你预期的195分钟一致(因为date1比date2多194分钟59秒,换算成分钟就是194.9833)。
为什么会这样?
R的as.POSIXct函数默认使用Sys.timezone()返回的系统本地时区来解析时间,字符串中的"GMT"只是普通文本,不会被当作时区信息处理。只有通过tz参数显式指定,才能强制R以指定时区来存储和计算时间。
内容的提问来源于stack exchange,提问作者sreeram
相关产品推荐
相关产品推荐

