【问题标题】:Seconds since midnight to time of day从午夜到一天中的时间的秒数
【发布时间】:2012-12-31 09:38:10
【问题描述】:

有一篇文章显示了如何使用lubridate 从午夜开始到几秒。从午夜后的几秒到一天中的某个时间怎么样?

那么,我如何使用 24752.05 来获取 06:52:32,而不是使用 06:52:32 来获取 24752.05?

【问题讨论】:

  • 想要链接到显示时间的帖子 -> seconds-since-midnight?

标签: r time lubridate


【解决方案1】:

在午夜时间戳和偏移量的总和上使用as.POSIXct(),可能通过设置 TZ 进行调整。

在我的默认时区:

R> as.POSIXct(trunc(Sys.time(), units="days") + 24752.05)
[1] "2013-01-16 06:52:32.04 CST"
R> 

请注意,答案(就像前面的问题一样)可以在基础 R 中很好地解决,一直有传言说每次问题都必须涉及 lubridate 而不是承受。

【讨论】:

  • 接下来你会告诉我可以不使用 ggplot 进行绘图。 . . as.POSIX.ct 也可以处理 Epoch 时间吗?
  • 是的,当然(对于这两部分,尤其是 ggplot 部分)。
  • @DirkEddelbuettel, trunc(Sys.time()) 不提供午夜时间戳
【解决方案2】:

当然,您可以直接计算小时、分钟和秒。这是基于 POSIX 时间的定义。 Midnight 总是有一个可以被86400 整除的time_t 值。

x <- 24752.05

paste(sprintf("%02d", floor(x / 3600)),
      sprintf("%02d", floor(x %% 3600 / 60)),
      sprintf("%02d", floor(x %% 60 )),
      sep=":"
)
## [1] "06:52:32"

【讨论】:

  • 请注意,这仅适用于 GMT 时间戳。
【解决方案3】:

另一种选择:

format(as.POSIXct('1900-1-1') + 24752.05, '%H:%M:%S')
# [1] "6:52:32"

【讨论】:

  • 您可以删除as.difftime(),因为秒是本机表示。
  • 另外,请注意我们如何得到不同的答案。您对 1900-01-01 的使用是有问题的,因为您错过了所有的调整秒数。
  • @Drik hmmm,我们的两个结果都与 OP 在他的问题中的不同。
  • OP 颠倒了分秒。
  • @DirkEddelbuettel 我们的计算机不考虑闰秒。相反,时钟被转动了。
【解决方案4】:

使用lubridate 只是为了多样化:

library(lubridate)

Sys.time() + seconds(24752.05)

或从午夜开始:

as.Date(Sys.time()) + seconds(24752.05)

【讨论】:

  • 上帝只会在他们应得的时候杀死小猫。
猜你喜欢
  • 2012-10-03
  • 1970-01-01
  • 1970-01-01
  • 2011-06-09
  • 2020-09-30
  • 1970-01-01
  • 1970-01-01
  • 2021-09-23
  • 1970-01-01
相关资源
最近更新 更多