【问题标题】:How to add the time to a date when using as.date?使用 as.date 时如何将时间添加到日期?
【发布时间】:2015-08-01 16:01:45
【问题描述】:

我此时进行了测量:13880,它们代表"days since 1970-01-01 00:00:00"

所以现在我想知道日期和时间:

as.Date(13880, origin="1970-01-01")
[1] "2008-01-02"  # works fine

现在添加时间:

as.Date(13880, origin="1970-01-01",tz = "UTC",  format="%Y/%m/%d %H:%M:%S")
[1] NA

as.POSIXct(13880, origin="1970-01-01")
[1] "1970-01-01 04:51:20 CET"
as.POSIXlt(13879, origin="1970-01-01")
[1] "1970-01-01 04:51:19 CET"

这些都不适合我。有什么想法吗?

【问题讨论】:

  • 如果13880 以天为单位,你怎么知道时间?
  • @DavidArenburg,不确定这种情况,但我记得在 Excel 中日期存储为数字(例如 13880),而小时数是其中的一部分,因此例如 13880.5 将是日期 X + 12小时(半天) - 正如 C8H10 的答案...
  • @docendodiscimus 可能,不知道。
  • 为什么不直接as.POSIXct(as.Date(13880))

标签: r


【解决方案1】:
as.POSIXct(as.Date("1970-01-01") + 13880) # returns "2008-01-01 19:00:00 EST"
as.POSIXct(as.Date("1970-01-01") + 13880.5) # returns "2008-01-02 07:00:00 EST"

您还可以设置时区: How to change the default time zone in R? 还有:http://blog.revolutionanalytics.com/2009/06/converting-time-zones.html

【讨论】:

  • 我不认为这是正确的。 as.Date 结果取决于您的系统默认时区(在您的情况下是“EST”),而 13880 以天为单位,那么您应该从哪里花时间呢?
  • @DavidArenburg OP 声明开始时间是 1970-01-01 的 00:00(但没有指定 TZ,因此假设 UTC,这是 ?as.Date 的默认输入)。我的解释是,时间应该取自小数天(上例中的 13880.5 的 0.5)并加到午夜——所以加半天会让你到达 12:00 UTC 或 07:00 EST。
  • 你可能是对的,那么你可能应该在as.Date 中指定tz 然后
猜你喜欢
  • 2015-09-21
  • 2023-03-31
  • 2017-04-10
  • 2019-04-06
  • 2021-03-26
  • 1970-01-01
  • 2011-09-02
  • 1970-01-01
相关资源
最近更新 更多