as.POSIXct,日期时间包括午夜

时间:2013-11-03 19:02:05

标签: r datetime posixct

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

示例代码:

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 个答案:

答案 0 :(得分: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
    }
}

答案 1 :(得分: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)

答案 2 :(得分: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"

答案 3 :(得分: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")

这对我有用。