【问题标题】:Convert numeric to date & time after reading date from xlsx file using openxlsx使用 openxlsx 从 xlsx 文件读取日期后将数字转换为日期和时间
【发布时间】:2017-08-08 10:08:18
【问题描述】:

当我尝试使用 openxlsx 从 xlsx 文件中读取日期时遇到问题。我已经尝试过 xlsx 和 xlconnect 包,但是它们在我的计算机上的 Java 都有问题,所以我使用 openxlsx。

我的日期数据是这样的:

1/01/2015 0:30
1/01/2015 1:00
1/01/2015 1:30
1/01/2015 2:00
1/01/2015 2:30
1/01/2015 3:00
1/01/2015 3:30
1/01/2015 4:00
1/01/2015 4:30
1/01/2015 5:00

我使用以下代码读取数据:

a <- read.xlsx(paste0(myPath,"try/",myFileNameList[i]),startRow = 2,sheet = 1)

然后,我将数据保存为 csv 文件。在这个 csv 文件中,日期如下所示:

42005.02083
42005.04167
42005.0625
42005.08333
42005.10417
42005.125
42005.14583
42005.16667
42005.1875
42005.20833

类是数字的。所以,这些数字应该对应于上面的日期。如何将数字数据转换回日期和时间?

数据样本为:

a <- c(42005.02083,42005.04167,42005.06250,42005.08333,42005.10417,42005.12500,42005.14583,42005.16667,42005.18750,42005.20833)

【问题讨论】:

    标签: r date time numeric


    【解决方案1】:

    它们是自 1899-12-30 以来的天数和小数天数:

    as.POSIXct("1899-12-30") + as.difftime(a, units="days")
    # [1] "2015-01-01 00:29:59 AEST" "2015-01-01 01:00:00 AEST" "2015-01-01 01:30:00 AEST"
    # [4] "2015-01-01 01:59:59 AEST" "2015-01-01 02:30:00 AEST" "2015-01-01 03:00:00 AEST"
    # [7] "2015-01-01 03:29:59 AEST" "2015-01-01 04:00:00 AEST" "2015-01-01 04:30:00 AEST"
    #[10] "2015-01-01 04:59:59 AEST"
    

    获取预期结果(默认情况下在您的本地时区),除了一些与保存和重新加载时精度损失相关的非常小的舍入误差。

    【讨论】:

    • 非常感谢!但我无法复制你的答案。我在墨尔本。我的数据涉及悉尼、墨尔本和澳大利亚所有州。当我运行时:as.POSIXct(a,origin = "1899-12-30",tz="Australia/Brisbane") + as.difftime(a, units="days")。结果如下: [1] "2015-01-01 22:10:04 AEST" "2015-01-01 22:40:05 AEST" "2015-01-01 23:10:05 AEST" ...当我使用“Australia/Melbourne”等其他 tzs 时,我得到了不同的结果。你能给我解释一下吗?谢谢。
    • @FengChen - 因为你没有使用我写的代码:as.POSIXct(a, origin = "1899-12-30")as.POSIXct("1899-12-30") 根本不是一回事。
    • 知道了。非常感谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-09-08
    • 1970-01-01
    • 1970-01-01
    • 2022-08-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多