2

我想将存储为字符的日期时间转换为日期时间对象。但是,如果日期时间包括午夜,则生成的日期时间对象不包括时间组件,然后在稍后的函数中使用时会引发错误(此处不需要 - 但一个用于提取指定位置和日期时间的天气数据的函数)。

示例代码:

example.dates <- c("2011-11-02 00:31:00","2011-11-02 00:00:00","2011-11-02 00:20:22")
posix.dates   <- as.POSIXct(example.dates, tz="GMT", format="%Y-%m-%d %H:%M:%S")
posix.dates
posix.dates[2]

仅当单独调用包含午夜的日期时间(原子向量)时,才排除 NB 时间。

有没有办法保留午夜时间的时间数据?你能推荐一个替代功能吗?

4

4 回答 4

2

好的,一段时间后我可以再次确认您的问题。

对我来说,这看起来像是 R 中的一个错误。我建议您在https://bugs.r-project.org/bugzilla3/上报告它。

作为临时解决方法,您可以尝试是否有助于覆盖这样的strptime函数:

strptime <- function (x, format, tz = "") 
{
    if ("POSIXct" %in% class(x)) {
        x
    } else {
        y <- .Internal(strptime(as.character(x), format, tz))
        names(y$year) <- names(x)
        y
    }
}
于 2013-11-03T20:26:47.313 回答
0

我更喜欢将lubridate包用于日期时间。它似乎也不会在这里引起问题:

example.dates <- c("2011-11-02 00:31:00","2011-11-02 00:00:00","2011-11-02 00:20:22")
library(lubridate)
ymd_hms(example.dates)
于 2013-11-03T22:02:42.873 回答
0

lubridate::as_datetime() 更灵活,接受日期(解释为 00:00:00)和日期时间。

example.dates <- c("2011-11-02", "2011-11-02 00:31:00","2011-11-02 00:00:00","2011-11-02 00:20:22")
library(lubridate)

ymd_hms(example.dates)
#> Warning: 1 failed to parse.
#> [1] NA                        "2011-11-02 00:31:00 UTC"
#> [3] "2011-11-02 00:00:00 UTC" "2011-11-02 00:20:22 UTC"

as_datetime(example.dates)
#> [1] "2011-11-02 00:00:00 UTC" "2011-11-02 00:31:00 UTC"
#> [3] "2011-11-02 00:00:00 UTC" "2011-11-02 00:20:22 UTC"
于 2018-09-07T20:49:33.230 回答
0

现在意识到这是一个老问题,但我遇到了同样的问题并找到了这个解决方案:

https://stackoverflow.com/a/51195062/8158951

本质上,您需要做的就是应用如下格式。OP 的代码需要在 POSIXct 函数调用之后包含格式化调用。

posix.dates <- format(as.POSIXct(example.dates, tz="GMT"), format="%Y-%m-%d %H:%M:%S")

这对我有用。

于 2019-01-15T03:17:01.710 回答