在更改日期默认格式

时间:2018-06-01 20:08:35

标签: r date type-conversion character

我在R中有以下字符变量:

> d <- "06/01/2018"
> class(d)
> "character"

我想将其转换为Date,更改默认日期格式,并将数据类型保留为Date,因此我从:

开始
> d <- as.Date(s, format = "%m/%d/%Y")
> class(d)
> "Date"

一切都很好,但是默认日期格式以年份而不是月份开头 - 我希望它以月份开头:

> d
> "2018-06-01"

因此,如果我再次格式化,则日期从现在的月份开始,但它会将变量恢复为字符!

> d <- format(d, "%m/%d/%Y")
> d
> "06/01/2018"
> class(d)
> character

如何在不转换回字符的情况下以新的(非默认)格式保留d作为日期?

2 个答案:

答案 0 :(得分:0)

1)chron print.Date将始终使用yyyy-mm-dd但chron将使用mm / dd / yy:

library(chron)

d <- "06/01/2018"
as.chron(d)
## [1] 06/01/18

2)子类您可以定义以所需方式显示的Date子类:

as.subDate <- function(x, ...) UseMethod("as.subDate")
as.subDate.character <- function(x, ...) {
  structure(as.Date(x, "%m/%d/%Y"), class = c("subDate", "Date"))
}
format.subDate <- function(x, ...) format.Date(x, "%m/%d/%Y")
as.subDate(d)

## [1] "06/01/2018"

您可能需要添加更多方法,具体取决于您要执行的操作。

答案 1 :(得分:0)

只需在控制台输入变量名称,即可使用print的默认参数进行打印。如果您需要其他格式,请更改print的工作方式{/ 1}}:

Date

这只是标准的Sys.Date() # [1] "2018-06-04 print.Date <- function (x, max = NULL, ...) { if (is.null(max)) max <- getOption("max.print", 9999L) n_printed <- min(max, length(x)) formatted <- strftime(x[seq_len(n_printed)], format = "%m/%d/%Y") print(formatted, max = max, ...) if (max < length(x)) { cat(" [ reached getOption(\"max.print\") -- omitted", length(x) - max, "entries ]\n") } else if (length(x) == 0L) { cat(class(x)[1L], "of length 0\n") } invisible(x) } Sys.Date() # [1] "06/04/2018" 功能,只需进行一些编辑。

但我必须对此发表评论:

  

我想将其转换为日期,更改默认日期格式,并将数据类型保留为日期

print.Date向量没有格式。将格式转换为Date向量时,可以使用格式(这是character所做的),但print实际上只是具有不同类的Date。整数给出了纪元(1970-01-01)之后的天数:

integer