将日期字符串"yyyy-mm-dd"转换为自纪元以来的毫秒数

Mar*_*rta 3 format r date

我有一些数字表示自纪元以来的毫秒数,00:00:00协调世界时(UTC),1970年1月1日,星期四

    1365368400000,
    1365973200000,
    1366578000000
Run Code Online (Sandbox Code Playgroud)

我正在将它们转换为日期格式:

    as.Date(as.POSIXct(my_dates/1000, origin="1970-01-01", tz="GMT"))
Run Code Online (Sandbox Code Playgroud)

回答:

 [1] "2013-04-07" "2013-04-14" "2013-04-21"
Run Code Online (Sandbox Code Playgroud)

如何将这些字符串转换回自纪元以来的毫秒数?

Ric*_*ton 5

这是你的javascript日期

x <- c(1365368400000, 1365973200000, 1366578000000)
Run Code Online (Sandbox Code Playgroud)

您可以通过除以一天中的毫秒数来更轻松地将它们转换为R日期.

y <- as.Date(x / 86400000, origin = "1970-01-01")
Run Code Online (Sandbox Code Playgroud)

要转换回来,只需转换为数字并乘以此数字即可.

z <- as.numeric(y) * 86400000
Run Code Online (Sandbox Code Playgroud)

最后,检查答案是否是您的开始.

stopifnot(identical(x, z))
Run Code Online (Sandbox Code Playgroud)

根据评论,您有时可能会得到数字舍入错误,导致x并且z不相同.对于像这样的数字比较,使用:

library(testthat)
expect_equal(x, z)
Run Code Online (Sandbox Code Playgroud)