0

我正在做一个项目,我需要记录和跟踪收到的电子邮件的日期和时间。这是我拥有的代码片段。

library(RDCOMClient)

OutApp <- COMCreate("Outlook.Application")
OutlookNameSpace <- OutApp$GetNameSpace("MAPI")

folderName <- "Inbox"

folder <- OutlookNameSpace$Folders(1)$Folders(folderName)
emails <- folder$Items

我可以使用 ReceivedTime() 获取每封电子邮件的接收日期(例如 2020-07-17)

as.Date(emails(1)$ReceivedTime(), origin = "1899-12-30")

但是,我怎样才能得到接收时间的小时、分钟、秒分量?

谢谢你。

4

1 回答 1

2

我怀疑 44029.7004451092 只是自 1900 年以来天数的一小部分。因此,如果您可以访问该数字(我不确定如何访问,因为我无法访问 Outlook 电子邮件,但不应该太很难从对象中访问它),然后我们可以编写一个函数来提取时间。

例如,假设您已提取该.Data字符串:'44029.7004451092'

我们可以将其传递给自定义函数。这个函数基本上将字符串分成两部分。第一部分是日期(即 44029)。这就是我们得到日期的地方。第二部分是句号之后的一系列数字,我假设它是指一天中的一小部分。(例如,0.5 是下午 12 点。)

然后,我们可以做一些简单的算术运算,根据一天中的秒数计算出该分数中有多少小时、分钟和秒。然后我们把它包装起来,并返回一个 POSIXct 对象。

get_time_from_date <- function(x, day_seconds = 86400) {
    day_fraction <- as.numeric(paste0('0.', strsplit(x, '\\.')[[1]][2]))
    num_seconds <- day_fraction * day_seconds
    day_hour <- num_seconds %/% 3600
    day_min <- num_seconds %% 3600 %/% 60
    day_sec <- num_seconds %% 3600 %% 60
    actual_date <- as.Date(as.numeric(strsplit(x, '\\.')[[1]][1]), origin = "1899-12-30")
    return(as.POSIXct(paste0(actual_date, ' ', day_hour, ':', day_min, ':', day_sec)))
}

get_time_from_date('44029.7004451092')
# [1] "2020-07-17 16:48:38 NZST"

时区将取决于您的系统。我无法验证这是否正确,但希望它对你有用。

于 2020-09-08T09:45:49.280 回答