转换chr";00:00:00“;“至今时间”;00:00:00“;

转换chr";00:00:00“;“至今时间”;00:00:00“;,r,time,posixct,lubridate,posixlt,R,Time,Posixct,Lubridate,Posixlt,我的问题来自。该问题包含以下字符串 x <- "2007-02-01 00:00:00" y <- "02/01/2007 00:06:10" 如您所见,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

我的问题来自。该问题包含以下字符串

x <- "2007-02-01 00:00:00"
y <- "02/01/2007 00:06:10"
如您所见,
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"

dt如果日期的时间部分是午夜,则只有
打印
会降低精度。这在
??strftime
帮助中有详细说明,特别是格式参数:

字符串。默认值为“%Y-%m-%d%H:%m:%S”(如果有) 组件的时间组件不是午夜,并且为“%Y-%m-%d” 否则

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

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

print.POSIXct更奇怪的是,如果你这样做了
n@RichardScriven:我认为这是lubridate的一个缺陷。OP的问题其实根本不是什么问题。这类似于争论数字1不在小数点右边打印零是一个问题。@JoshuaUlrich但午夜是一天中的实际时间,所以不应该这样打印吗?@RichardScriven:我同意@agstudy。对我来说,将double打印为
1.0
而不是
1
是有意义的,因为它更明确地表示它是一个double而不是整数。但这是默认行为,并且有文档记录。如果您不喜欢它,您可以随意更改它。:)好啊我屈服了。它在那里当一个序列穿过午夜,所以我很高兴
x影响打印的代码实际上是
format.POSIXlt
,它调用
format.POSIXct
调用,它调用
print.POSIXct
调用-
if(all(times[!is.na(times)]==0);%Y-%m-%d
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
[1] "2007-02-01 00:00:00"