【问题标题】:Create in R date, time intervals increasing by 10ms in Unix timestamp format在 R 日期中创建,时间间隔以 Unix 时间戳格式增加 10 毫秒
【发布时间】:2020-10-07 14:10:53
【问题描述】:

我正在尝试将此向量(v) 转换为 Unix 时间戳。年、月、日、时、分、秒不重要,但需要引入。

v = c("10ms", "20ms", "30ms", ..., "800ms")

A) 我想从以下开始:

x <- c("2000-01-01 0:00:00.000", "2000-01-01 0:00:00.010", "2000-01-01 0:00:00.020")
y <- as.POSIXct(x, format = "%Y-%m-%d %H:%M:%OS", origin = "1970-01-01", tz = "America/Chicago")
y = format(y, "%Y-%m-%d %H:%M:%OS4")

B) 并将其转换为 Unix 时间戳:

z = as.numeric(as.POSIXct(y,format = "%Y-%m-%d %H:%M:%OS4", origin = "1970-01-01", tz = "America/Chicago"))

这会产生:NA NA NA

z = as.numeric(as.POSIXct(y,format = "%Y-%m-%d %H:%M:%OS", origin = "1970-01-01", tz = "America/Chicago"))

这产生:946706400 946706400 946706400

任何帮助将不胜感激。

【问题讨论】:

  • 这是R?您应该添加标签以获得更好的查找性...

标签: r timestamp milliseconds


【解决方案1】:

修复起来非常简单。在您的示例中,z 实际上 确实 包含小数部分,但由于数字太大,它不会打印到控制台。如果你把它转换成一个字符,你应该得到你想要的结果:

as.character(round(z, 3))
#> [1] "946706400"    "946706400.01" "946706400.02"

或者取决于您选择的格式:

y <- as.POSIXct("2000-01-01") + lubridate::milliseconds(1:10)
format(round(as.numeric(y), 3), digits = 13)
#>  [1] "946684800.001" "946684800.002" "946684800.003" "946684800.004" "946684800.005"
#>  [6] "946684800.006" "946684800.007" "946684800.008" "946684800.009" "946684800.010"

【讨论】:

  • 您的第二个解决方案非常有用,比我的方法好得多。谢谢。
猜你喜欢
  • 2016-09-06
  • 1970-01-01
  • 2017-10-11
  • 2022-11-03
  • 2018-06-25
  • 1970-01-01
  • 2020-06-24
  • 2018-01-10
  • 2019-06-16
相关资源
最近更新 更多