在R中创建日期,时间间隔以10ms为单位增加,采用Unix时间戳格式。

问题描述 投票:0回答:1

我正试图将这个向量(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 timestamp milliseconds
1个回答
0
投票

这个问题出奇的简单,要解决。在你的例子中。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"
© www.soinside.com 2019 - 2024. All rights reserved.