2014-10-29 32 views
0

假設變化秩序和保護類

x <- "2012-10-07" 

,我使用

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

我需要使用更改爲格式%d/%m/%Y其轉換爲POSIXlt

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?甚至應該關注這個問題,因爲一個「時間」對象知道日期,月份和年份在哪裏,而其他一切只是爲了(漂亮)打印?

+0

如果你不喜歡打印方法,你可以自己寫。我不太瞭解這個問題。 – Roland 2014-10-29 13:45:53

+0

@Roland我已經修改了一下這個問題。所以你說的是'as.POSIXlt'的打印默認爲'%Y-%m-%d',你應該爲其他任何東西制定一個自定義打印方法? – 2014-10-29 13:49:19

回答

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" 

我敢肯定,你可以自己這個修改只輸出日期午夜。