【问题标题】:How to get date class and POSIXCt give the same result如何获取日期类和 POSIXCt 给出相同的结果
【发布时间】:2015-06-29 10:15:16
【问题描述】:

我正在从 excel 中读取一些数字,它们是日期的数字版本。 Excel 将 42094 显示为 2015 年 3 月 31 日(或某些变体,具体取决于日期的结构。 as.Date(42094,origin = "1899-12-30") 产生 "2015-03-31"。原产地的选择与微软对闰年的误解有关。 这两行代码

    temp <- as.Date(42094,origin = "1899-12-30")
    as.POSIXct(temp, origin = "1899-12-30")

生产

“1899-12-30 04:41:34 MST”

有 as.POSIXct(temp, origin = "1900-1-1") 结果是 "2015-03-30 18:00:00 MDT"

现在我想要的是

"2015-03-31 MDT"

或类似的东西

【问题讨论】:

  • 日期(和时间)数据以 Excel 电子表格形式提供给我;我想将它们转换为 POSIXct 日期时间。 Col 1 是收集数据的日期。 Col 2 是从午夜开始的分钟数计数器。第一列具有日期格式。第一个值是 2015 年 3 月 31 日。这是在美国/丹佛时区收集的数据的正确日期。当我将格式更改为数字时,值为 42094。这是自 1990 年 1 月 1 日以来的天数。

标签: excel date posixct


【解决方案1】:

我的问题的部分解决方案是这行代码。 origin=as.POSIXct("1970-01-01", tz="美国/丹佛") 使用通常使用原点的方式(原点 =“1970-01-01”),假定为 GMT;此代码将其更改为本地时区。

#pnuts 中的代码将天数转换为 2015-3-31,从 microsoft 1900 原点 (42094) 转换为 1970-1-1 (25569) 的 R 原点。然后它将天转换为秒(86400),然后将我的小时 B1 转换为秒。因此,这里有几行代码可以对数据的日期部分执行我想要的操作。

    temp <- (42094-25569)*86400
    as.POSIXct(temp, origin=as.POSIXct("1970-01-01", tz="America/Denver"))

结果是

    "2015-03-31 01:00:00 MDT"

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-12-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-25
    • 1970-01-01
    • 2019-04-30
    • 1970-01-01
    相关资源
    最近更新 更多