从xlsx导入解析日期和时间

时间:2020-06-18 17:47:55

标签: r date

我在Excel中有一列具有以下格式的日期:MM / DD / YY AM或MM / DD / YYPM,并且在使用readxl :: read_excel导入后能够解析此日期。

parse_date_time(x, '%m/%d/%y %p', tz = "UTC")

现在,如果我想输入MM / DD / YY HH:MM PM,则导入以数字形式输入。例如。

"3/16/20 3:00 PM" becomes 43906.625 after import.

一种解决方案是将日期列作为字符串导入,但是,我在文件中有50列,并且不想对每种列类型进行硬编码。有没有办法从该数值(例如43906.625)中获取日期和时间?

1 个答案:

答案 0 :(得分:3)

Excel使用“天整数”格式。 R将“ seconds-integer”用于时间,将“ day-integer”用于Date,因此根据要转换为的类,您需要容纳一天的秒数(86,400)。值得一提的是Excel使用的是1899年(这一年)的“来源”。

as.POSIXct(43906.625 * 86400, origin = "1899-12-30", tz = "UTC")
# [1] "2020-03-16 15:00:00 UTC"

从历史上可以看出:"1899-12-30"而不是"1899-12-31"(今天结束了?)之类的原因还是在2013年的博客文章中提到的:

对于Windows上的Excel,1900年之后的日期的起始日期为1899年12月30日。(Excel的设计人员认为1900年是leap年,但并非如此。)对于Mac上的Excel,其原始日期为1904年1月1日。

我不知道这方面的规范参考,R-Blogger借用/抄袭该文章的网站也没有响应。对于此主张,我更希望使用仍活跃且规范的参考(工程师错误地确定了leap年)。