7

我的问题来自这个问题。该问题具有以下字符串。

x <- "2007-02-01 00:00:00"
y <- "02/01/2007 00:06:10"

如果您尝试将此字符串转换为日期类对象,则会发生一些有趣的事情。

这是@nrusell 的回答示例。

as.POSIXct(x,tz=Sys.timezone())
[1] "2007-02-01 EST"

as.POSIXct(y,format="%m/%d/%Y %H:%M:%S",tz=Sys.timezone())
[1] "2007-02-01 00:06:10 EST" 

如您所见,00:00:00从第一个示例中消失。@Richard Scriven 在我们的讨论中使用lubridate.

dt <- as.POSIXct("2007-02-01 00:00:00")
hour(dt) <- hour(dt)+1
dt
[1] "2007-02-01 01:00:00 EST"
hour(dt) <- hour(dt)-1
dt
[1] "2007-02-01 EST"

再一次,00:00:00消失。为什么 R 避免00:00:00在转换后保留日期类对象?我们怎样才能保持00:00:00

4

1 回答 1

6

print如果日期的时间部分是午夜,则只是删除精度。这是帮助中解释的literlay ??strftime,特别是格式参数:

一个字符串。如果任何组件的时间组件不是午夜,则默认为 "%Y-%m-%d %H:%M:%S",否则为 "%Y-%m-%d"

一种想法是print为 POSIXct 对象重新定义 S3 方法:

print.POSIXct <- function(x,...)print(format(x,"%Y-%m-%d %H:%M:%S"))

现在以您为例,如果您打印 x 日期(带有午夜部分),您将得到:

x <- "2007-02-01 00:00:00"
x <- as.POSIXct(x,tz=Sys.timezone())
x
[1] "2007-02-01 00:00:00"
于 2014-09-21T22:40:49.417 回答