【问题标题】:how to convert date and time from character to datetime type如何将日期和时间从字符转换为日期时间类型
【发布时间】:2014-11-15 14:50:45
【问题描述】:

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

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

试过

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

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

【问题讨论】:

  • as.Date 仅返回日历日期,因为 Date 类对象仅显示为日历日期。

标签: r date datetime


【解决方案1】:

正如@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"

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

【讨论】:

  • 我可能是错的。但是,在我看来,OP 希望保留字符串中的日期和时间。 2007-02-01 EST 可能不是 OP 想要的,因为它在结果中不包含 00:00:00。
  • 嗯,这是一个公平的观点。我知道,如果您有一个带有00:00:00 的日期时间和另一个在data.frame 中具有非零HMS 的日期时间,等等......它会打印零 - 即data.frame(x=c(as.POSIXct(DateTime,tz=Sys.timezone()),as.POSIXct(DateTime,tz=Sys.timezone())+1))(使用上面的对象);不过,我会看看是否有办法使用单独的时间戳来做到这一点。
  • 谢谢!似乎在 DateTime 格式中 hms 没有显示,但在 DateTime2 格式中它是。
  • 对 - 这只发生在午夜 (00:00:00) - 它仍然保留信息(它只是不会打印它)。如果您在其他非午夜时间查看这样的时间戳,它会显示零,就像我在上面的评论中一样,否则您必须修改格式来解决这种行为,就像在@jazzurro 的解决方案中一样。
  • 除非您可以在文档中找到它,否则我认为这将是一个非常好的问题。例如,加载了lubridate,尝试dt &lt;- as.POSIXct("2007-02-01 00:00:00"); hour(dt) &lt;- hour(dt)+1; dt; hour(dt) &lt;- hour(dt)-1; dt。午夜似乎永远不会出现
【解决方案2】:

如果您想专门将“2007-02-01 00:00:00”转换为日期类对象,这就是您需要做的。这是基于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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-17
    • 2015-09-17
    • 2011-09-08
    • 1970-01-01
    相关资源
    最近更新 更多