【问题标题】:Converting timestamp in microseconds to data and time in r将以微秒为单位的时间戳转换为 r 中的数据和时间
【发布时间】:2018-09-21 10:39:23
【问题描述】:

我正在尝试将时间戳(以微秒为单位)转换为 R 中的以下格式:

YYYY-MM-DD HH:MM:SS

我尝试了不同的方法,但都没有成功。按照我的代码:

options(digits=16) value = 1521222492687300 as.POSIXct(value, tz = "UTC", origin="1970-01-01 00:00:00")

我得到这个作为回报:

[1] "48207591-10-13 12:15:00 UTC"

即使除以 1000,正如一些帖子所建议的那样,我仍然得到一个无意义的结果:

as.POSIXct(value/1000, tz = "UTC", origin="1970-01-01 00:00:00") [1] "50175-08-15 19:31:27.300048 UTC"

有解决这个问题的建议吗?

【问题讨论】:

  • 一微秒是百万分之一秒,而不是千分之一秒。

标签: r timestamp unix-timestamp date-conversion


【解决方案1】:

正如 Gabor 所暗示的,您需要除以 1e6,而不是 1e3:

R> v <- 1521222492687300
R> v
[1] 1.52122e+15
R> anytime::anytime(v / 1e6)
[1] "2018-03-16 12:48:12.6872 CDT"
R> 

当然与as.POSIXct 等相同,但您需要提供冗余来源:

R> as.POSIXct(v / 1e6, origin="1970-01-01")
[1] "2018-03-16 12:48:12.6872 CDT"
R> 

查看比例的一种方法是转换当前时间:

R> w <- as.numeric(Sys.time())
R> c(v, w)
[1] 1.52122e+15 1.52346e+09
R> 

这使得缩放差异更加明显。

【讨论】:

  • “看你的规模” 是一个很好的观点,清楚地表明了问题。
  • 也可以与 lubridate 以相同的方式工作,如果首选 anytime,则通过执行 lubridate::as_datetime(v/1e6)。
猜你喜欢
  • 2021-03-15
  • 2015-06-17
  • 2018-11-29
  • 1970-01-01
  • 2018-03-15
  • 2012-01-12
  • 1970-01-01
  • 2019-12-23
  • 2017-05-28
相关资源
最近更新 更多