【发布时间】:2022-01-29 20:31:33
【问题描述】:
我有一种情况,日期是这样写的,以毫秒为单位:
2021/03/04 11:15:19.000
2021/03/04 11:15:19.999
我使用 lubridate 将它们转换为日期时间,它们看起来很好并且完全相同:
> library(lubridate)
> as_datetime("2021/03/04 11:15:19.000")
[1] "2021-03-04 11:15:19 UTC"
> as_datetime("2021/03/04 11:15:19.999")
[1] "2021-03-04 11:15:19 UTC"
但是,当我比较它们时,它们并不相等:
> as_datetime("2021/03/04 11:15:19.000") == as_datetime("2021/03/04 11:15:19.999")
[1] FALSE
但如果是简单的日期,它们是:
> as_date("2021/03/04 11:15:19.000") == as_date("2021/03/04 11:15:19.999")
[1] TRUE
这给我的工作流程带来了问题。排除故障特别困难,因为仅查看处理的日期时无法知道毫秒是不同的,因为毫秒不显示。有没有办法让它们读取为等效的日期时间?
我最好的解决方法是转换为字符,因为它们在字符形式上是等效的:
> as.character(as_datetime("2021/03/04 11:15:19.000")) ==
as.character(as_datetime("2021/03/04 11:15:19.999"))
[1] TRUE
由此我们可以再次转换为日期时间:
> as_datetime(as.character(as_datetime("2021/03/04 11:15:19.000"))) ==
as_datetime(as.character(as_datetime("2021/03/04 11:15:19.999")))
[1] TRUE
但这个解决方案似乎真的很复杂。当然有更清洁的方法来做到这一点?
【问题讨论】:
-
检查
strftime或format,毫秒精度已经存在,但未打印,即strftime(as_datetime("2021/03/04 11:15:19.000"), "%OS3") [1] "19.000"; > strftime(as_datetime("2021/03/04 11:15:19.999"), "%OS3") [1] "19.999" -
跳过 lubridate 函数,使用 base R 定义时间转换:
as.POSIXct(yourdates, "%Y/%m/%d %H:%M:%S", tz="")
标签: r datetime lubridate milliseconds