如何使用 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"
时区取决于您的系统。我无法验证这是否正确,但希望它对你有用。
我正在做一个项目,我需要记录和跟踪电子邮件的接收日期和时间。 这是我拥有的代码片段。
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"
时区取决于您的系统。我无法验证这是否正确,但希望它对你有用。