📜  如何在 R 中为日期时间添加或减去时间跨度?

📅  最后修改于: 2022-05-13 01:54:49.559000             🧑  作者: Mango

如何在 R 中为日期时间添加或减去时间跨度?

R 中的时间对象可以使用 POSIXct 类来声明,该类提供对此类对象的快速操作和存储。 R 中的外部包还有助于处理时间和日期,并允许对它们执行比较和直接算术运算。在本文中,我们将了解如何在 R 编程中为 DateTime 添加和减去时间跨度。

方法一:使用POSIXct对象

日期字符串可以首先转换为 POSIXct 对象,然后可以轻松地对其执行基本算术。 POSIXct 对象简化了数学运算的过程,因为它们依赖秒作为时间管理的主要单位。日期将转换为标准时区 UTC。可以将字符串类型的日期对象转换为 POSIXct 对象,在 R 中使用 as.POSIXct(date) 方法。由于日期以秒为单位存储,因此减法和加法可以通过首先转换小时和分钟也以秒为单位。数学运算符可直接用于向日期对象添加各种时间分量,该对象属于POSIXct 类。

1 hour = 1 * 60 * 60 seconds
1 min = 1 * 60 seconds

代码:

R
# declaring a datetime object
time1 <- as.POSIXct("2021-05-08 08:32:07",
                    format = "%Y-%m-%d %H:%M:%S")
  
print ("Original DateTime")
print (time1)
  
# adding 20 mins to datetime
mins <- 20 * 60
print  ("Adding 20 mins to DateTime")
print (time1 + mins)
  
# converting 3 hours to seconds
hrs <- 3 * 60 * 60
print  ("Subtracting 3 hours from DateTime")
  
# subtracting 3 hours from the 
# date time object
print (time1 - hrs)


R
# getting required libraries
library(lubridate)
  
# getting current time
time <- Sys.time()
print("Current time")
print (time)
  
# subtracting hours
hrs <- hours(5)
  
print ("Subtracting 5 hours")
mod_time <- time - hrs
print (mod_time)
secs <- seconds(17)
  
print ("Adding 17 seconds")
mod_time <- time + secs
print (mod_time)


R
# declaring a time object
time1 <- strptime("2021-07-07 00:32:07",
                  format = "%Y-%m-%d %H:%M:%S")
print ("Time")
print (time1)
  
# converting 5 hours to seconds
hrs <- 5 * 60 * 60
print  ("Subtracting 5 hours")
print (time1 - hrs)
  
# adding 48 seconds and 24 mins 
mins <- 24 * 60
secs <- 48 * 60 * 60
print  ("Modified Time")
print ((time1 + mins) - secs)


输出:

[1] "Original DateTime"
[1] "2021-05-08 08:32:07 UTC"
[1] "Adding 20 mins to DateTime"
[1] "2021-05-08 08:52:07 UTC"
[1] "Subtracting 3 hours from DateTime"
[1] "2021-05-08 05:32:07 UTC"

方法二:使用lubridate包

R 中的 Lubridate 包用于处理日期和时间对象。它使解析和操作对象更容易,需要通过以下命令安装并加载到工作空间:

install.packages("lubridate")

R 中的 Sys.time()函数用于根据 IST 区域获取当前日期和时间对象。 R 中的 hours() 方法用于输入表示小时数的整数。 “lubridate”包对象允许对其各种组件进行直接算术,因此可以直接从 lubridate 时间对象中减去小时数。结果也是属于这个类的对象。



代码:

电阻

# getting required libraries
library(lubridate)
  
# getting current time
time <- Sys.time()
print("Current time")
print (time)
  
# subtracting hours
hrs <- hours(5)
  
print ("Subtracting 5 hours")
mod_time <- time - hrs
print (mod_time)
secs <- seconds(17)
  
print ("Adding 17 seconds")
mod_time <- time + secs
print (mod_time)

输出

[1] "Current time" 
[1] "2021-05-22 03:27:02 IST" 
[1] "Subtracting 5 hours" 
[1] "2021-05-21 22:27:02 IST" 
[1] "Adding 17 seconds" 
[1] "2021-05-22 03:27:19 IST"

方法 3:使用 strptime() 方法

R 中的 strptime 方法用于将字符向量(各种格式)直接转换为 POSIXlt 格式。 strptime 比之前的方法快,因为 strptime 只处理字符输入。

strptime() 的工作方式类似于 POSIXct 对象,其中所有计算都以秒为单位完成。

代码:

电阻

# declaring a time object
time1 <- strptime("2021-07-07 00:32:07",
                  format = "%Y-%m-%d %H:%M:%S")
print ("Time")
print (time1)
  
# converting 5 hours to seconds
hrs <- 5 * 60 * 60
print  ("Subtracting 5 hours")
print (time1 - hrs)
  
# adding 48 seconds and 24 mins 
mins <- 24 * 60
secs <- 48 * 60 * 60
print  ("Modified Time")
print ((time1 + mins) - secs)

输出:

[1] "Time"
[1] "2021-07-07 00:32:07 UTC"
[1] "Subtracting 5 hours"
[1] "2021-07-06 19:32:07 UTC"
[1] "Modified Time"
[1] "2021-07-05 00:56:07 UTC"

说明:减去 5 小时,导致返回上一个日期。在第二种情况下,分别计算分钟数和秒数。