如何将日期和时间从字符转换为日期时间类型

时间:2014-09-21 14:59:22

标签: r date datetime

如何将此转换为保留日期和时间的日期时间类型对象?

DateTime="2007-02-01 00:00:00"

尝试

as.Date(DateTime,'%Y-%m-%d %H:%M:%S') 

但不返回时间部分。在尝试strptime和lubridate之后无法弄清楚如何。感谢。

2 个答案:

答案 0 :(得分:12)

正如@Richard Scriven指出的那样,你不应该使用as.Date,因为它不是 datetime 类。以下是几种不同的方式:

DateTime <- "2007-02-01 00:00:00"
DateTime2 <- "02/01/2007 00:06:10"
## default format Y-m-d H:M:S
> as.POSIXct(DateTime,tz=Sys.timezone())
[1] "2007-02-01 EST"
> as.POSIXlt(DateTime,tz=Sys.timezone())
[1] "2007-02-01 EST"
##
## specify format m/d/Y H:M:S
> as.POSIXct(DateTime2,format="%m/%d/%Y %H:%M:%S",tz=Sys.timezone())
[1] "2007-02-01 00:06:10 EST"
> as.POSIXlt(DateTime2,format="%m/%d/%Y %H:%M:%S",tz=Sys.timezone())
[1] "2007-02-01 00:06:10 EST"
##
## using lubridate
library(lubridate)
> ymd_hms(DateTime,tz=Sys.timezone())
[1] "2007-02-01 EST"
> mdy_hms(DateTime2,tz=Sys.timezone())
[1] "2007-02-01 00:06:10 EST"

当您拥有format=格式时,您不必为as.POSIXctas.POSIXlt指定%Y-%m-%d %H:%M:%S。在其他情况下,例如%m/%d/%Y %H:%M:%S,您通常必须明确指定格式。

答案 1 :(得分:2)

如果你想专门转换&#34; 2007-02-01 00:00:00&#34;对于日期类对象,这是您需要做的。这基于this question and answer

print.POSIXct <- function(x,...)print(format(x,"%Y-%m-%d %H:%M:%S"))
x <- "2007-02-01 00:00:00"
x <- as.POSIXct(x,tz=Sys.timezone())
x