更改POSIXlt对象中元素的顺序并保留类

时间:2014-10-29 13:40:46

标签: r datetime posixct

我们假设

x <- "2012-10-07"

我使用

将其转换为POSIXlt
y <- strptime(x, format = "%Y-%m-%d")

我需要使用

更改格式为%d/%m/%Y
z <- strftime(y, format = "%d/%m/%Y", tz = "GMT")

然而,这会使对象成为一个角色。

class(z)
[1] "character"

以及何时

as.POSIXlt(z, format = "%d/%m/%Y", tz = "GMT")

打印结果是

[1] "2012-10-07 GMT"

(但希望它的格式为%d/%m/%Y)。

有没有办法将z转换为POSIXlt / POSIXct对象并保留(打印)订单%d/%m/%Y?人们甚至应该关注这一点,因为&#34; time&#34;对象知道日,月和年的位置,其他一切只是(漂亮)打印?

1 个答案:

答案 0 :(得分:1)

这样的事情:

x <- "2012-10-07"
y <- strptime(x, format = "%Y-%m-%d")

class(y) <- c("EUtime", class(y))

print.EUtime <- function (x, format="%d/%m/%Y %H:%M:%S", ...) 
{
  max.print <- getOption("max.print", 9999L)
  if (max.print < length(x)) {
    print(format(x[seq_len(max.print)], format = format, usetz = TRUE), ...)
    cat(" [ reached getOption(\"max.print\") -- omitted", 
        length(x) - max.print, "entries ]\n")
  }
  else print(format(x, format = format, usetz = TRUE), ...)
  invisible(x)
}

y
#[1] "07/10/2012 00:00:00 CEST"

我相信你可以自己修改它,只输出午夜的日期。