在R中计算日期之间的差异

6

我在R中遇到了日期问题。将T1和T2定义为带有6个小数位的POSIXct或POSIXlt格式的日期:

 op <- options(digits.secs = 6)
 T1 = strptime("2015.10.10 12:00:00.150150", "%Y.%m.%d %H:%M:%OS")
 T2 = strptime("2015.10.10 16:30:15.212412", "%Y.%m.%d %H:%M:%OS")

如何以这种格式获取T1和T2之间的差异:
format = "%H:%M:%OS"

例如,定义日期之间的差异为:
diff = "04:30:15.062262"

我尝试了不同的方法,但都没有成功。

我的尝试:

T1 = strptime("2015.10.10 12:00:00.150150", "%Y.%m.%d %H:%M:%OS")
T2 = strptime("2015.10.10 16:30:15.212412", "%Y.%m.%d %H:%M:%OS")
h = difftime(T2,T1, units = "hours")
m = difftime(T2,T1, units = "mins")
s = difftime(T2,T1, units = "secs")

但是我不知道如何获取小数。


3
请展示一下您尝试过的内容,这样我们才能知道是需要调整您现有的解决方案还是提供一个全新的解决方案。作为一个通用提示,我在与时间和日期相关的所有事情上都使用lubridate软件包。我认为研究该软件包的文档将让您走得更远。 - Paul Hiemstra
嗯,这是一个好问题!我本来以为 as.difftime(T2 - T1, format='%H:%M:%OS') 可以工作,但事实并非如此。我不明白为什么会有负评... - drmariod
使用 lubridate 包中的一个很好的函数可以得到类似但不完全相同格式的输出... lubridate::seconds_to_period(difftime(T2,T1, units='secs')) - drmariod
1个回答

6
代码是自我解释的。
x <- as.numeric(difftime(T2,T1,units = "sec")) # diff in sec
hrs <- floor(x/3600) # get the hours
x <- x%%3600         # update the x after removing the hrs(in sec)  
min <- floor(x/60)   # get the minutes
sec <- x%%60         # get the sec

paste(hrs,min,sec,sep= ":")
# [1] "4:30:15.0622620582581"

1
我只需要6个小数秒,但是剪切这个字符串很简单。谢谢,它有效。 - Aslan Bayramkulov
1
@AslanBayramkulov 是的...sprintfformat() 都可以帮助你! - joel.wilson

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接