r - 执行数学运算后在时钟时间内显示时间

标签 r datetime time time-series

我从 创建了一个时间序列00:00:00 小时 23:00:00 小时 .添加任意小时数很容易,直到总和小于或等于 23:00:00 小时。总和超过 23:00:00 后,它开始以天数显示时间,这是非常直观的。但我希望在时钟时间内输出,无论我是做减法还是加法

假设我想做如下加法

library(chron)
times("23:00:00")+ times("01:00:00")
Time in days:
[1] 1 

我想要的输出是 低于一个。而不是得到我想要的日子
00:00:00 

我也试过减法
times("00:00:00")- times("01:00:00")
[1] -0.04166667

所需输出
 "23:00:00"

我也用 试过了POSIXct 但它在各种情况下都会出现各种错误
 as.POSIXct("00:00:00", format = "%H:%M:%S", tz = "UTC")
    [1] "2017-02-07 UTC" #Not printing time. Only dates 

使用 POSIXct 减法
as.POSIXct("00:00:00", format = "%H:%M:%S", tz = "UTC") -as.POSIXct("01:00:00", format = "%H:%M:%S", tz = "UTC")
        Time difference of -1 hours
        Warning message:
        In 1:0:0 : numerical expression has 2 elements: only the first used

使用 POSIXct 进行加法
as.POSIXct("23:00:00", format = "%H:%M:%S", tz = "UTC") + as.POSIXct("01:00:00", format = "%H:%M:%S", tz = "UTC")
Error in `+.POSIXt`(as.POSIXct("23:00:00", format = "%H:%M:%S", tz = "UTC"),  : 
  binary '+' is not defined for "POSIXt" objects

请帮我解决这个问题。还请帮助我在上面显示的 POSIXct 中打印时间和日期 如果有什么对您没有意义,请告诉我,而不是对我的问题投反对票。

最佳答案

请注意 timeschron包在内部将时间表示为数值(十进制天)。您要做的是保留小数点后的值并删除小数点之前的整数。这可以通过将模数取 1 来实现(尝试 2.5 %% 1)。所以,你可以通过 times(1) 取模数这将摆脱这一天。

library(chron)
(times("23:00:00")+ times("01:00:00")) %% times(1)
#[1] 00:00:00
> (times("00:00:00") - times("01:00:00")) %% times(1)
#[1] 23:00:00

使用 POSIXct

我不想使用 POSIXct为此,自 POSIXct由于日期和时区而使事情复杂化。内部,POSIXct是来自某个来源(通常是 1970-01-01)的秒数值。所以,如果你想给 POSIXct 添加一个时间间隔对象,只需添加该时间间隔(以秒为单位)。

要将 1 小时添加到“23:00:00”,您可以执行
format(as.POSIXct(
       as.numeric(as.POSIXct("23:00:00", format = "%H:%M:%S", tz = "UTC")) + 3600,
       origin = "1970-01-01", tz = "UTC"), "%H:%M:%S")
#[1] "00:00:00"

减法可以以同样的方式工作
format(as.POSIXct(
       as.numeric(as.POSIXct("24:00:00", format = "%H:%M:%S", tz = "UTC")) - 3600,
       origin = "1970-01-01", tz = "UTC"), "%H:%M:%S")
#[1] "23:00:00"

关于r - 执行数学运算后在时钟时间内显示时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42090895/

相关文章:

python - Python 中 ISO 8601 的日期时间

datetime - flutter :保持时间

datetime - 将 Go 时间从 UnixDate 转换为 RFC3339 无法保留时区

javascript - 有人知道这个 Chrome 错误的解决方法吗?

ruby-on-rails - Ruby 上周日的年月日

sql - 如何用 R 分析维基百科文章数据库?

r - 如何删除geom_errorbar中误差线的末端

c++ - 短函数c++的执行时间

r - 加载并执行 R 源文件

r - 如何使用pandoc将目录添加到R Markdown HTML文件中?