如何使用 R 获取 outlook 中收到的电子邮件的时间部分?

How to obtain the time component of emails received in outlook with R?

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

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")

但是,如何获取接收时间的小时、分钟、秒部分?

谢谢。

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

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

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

然后我们可以根据一天中的秒数,做一些简单的算术计算出该分数中有多少小时、分钟和秒。然后我们把它全部包起来,return 一个 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"

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