我想将存储为字符的日期时间转换为日期时间对象。 但是,如果日期时间包括午夜,则生成的日期时间对象将排除时间组件,然后在稍后的函数中使用时会抛出错误(此处不需要 - 但是提取指定位置和日期时间的天气数据的函数)。 / 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时间。
有没有办法保留午夜时间的时间数据?你能建议一个替代功能吗?
答案 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")
这对我有用。