如何在POSIXct日期将'day'格式化为单个数字

时间:2014-02-20 03:30:38

标签: r date formatting posixct

我希望这是一个相对简单的问题。我正在尝试在R中打印出一些日期,但需要输出为特定格式,每天使用一个字符,例如:2013年2月10日

以下是我正在尝试做的一个例子:

date_time <- as.POSIXct(paste("3/02/2012", "00:10:09", sep=" "), format="%d/%m/%Y %H:%M:%S")
print(format(date_time, "%d/%m/%Y %H:%M:%S"))

返回

"03/02/2012 00:10:09"

但我想要的是没有领先的0,就像这样:

"3/02/2012 00:10:09"

知道如何以这种方式格式化吗?请注意,对于2位数的日子,我仍然希望返回两个数字,而对于月份,我总是想要2个数字。

PS。是的,在澳大利亚,我们格式化日期dd / mm / yyyy

3 个答案:

答案 0 :(得分:6)

来自?strptime

 ‘%e’ Day of the month as decimal number (1-31), with a leading
          space for a single-digit number.

这样:

gsub("^ ", "" , format(date_time, "%e/%m/%Y %H:%M:%S"))
[1] "3/02/2012 00:10:09"

gsub("^0", "", format(date_time, "%d/%m/%Y %H:%M:%S"))
[1] "3/02/2012 00:10:09"

答案 1 :(得分:1)

挑剔,挑剔。不确定是否有更简单的方法,但你可以编写自己的格式函数:

date_time <- as.POSIXct(paste("3/02/2012", "00:10:09", sep=" "), format="%d/%m/%Y %H:%M:%S")

format.date <- function(x, ...) {
  tmp <- format(x, ...)
  tmp <- sub("^[0]+", "", tmp)
  tmp <- sub('/0','/', tmp)
  return(tmp)
}

format.date(date_time, "%d/%m/%Y %H:%M:%S")
##  "3/2/2012 00:10:09"

答案 2 :(得分:0)

从Jake的答案开始,但没有正则表达式,您可以使用INSERT INTO public.invoice_output (id, title, description) SELECT id, title, description FROM public.invoice_input ON CONFLICT (id) DO NOTHING; 来删除stringr::str_squish使用的前导空格。

%e