You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将日期时间变量转换为多种格式的字符串?(lubridate反向操作)

将标准日期转换为自定义格式字符串(lubridate解析的反向操作)

首先明确:lubridate本身没有专门对应dmy()/as_date()这类解析函数的反向格式化函数,但我们可以用基础R工具或轻量封装来实现你需要的效果,以下是几种实用方案:

1. 基础R format()函数(最直接)

基础R的format()可以直接处理日期对象,通过格式字符串指定输出样式,完全覆盖你提到的几种需求:

library(lubridate)
x <- today() # 示例日期:"2022-07-31"

# 输出 "31 July 2022"
format(x, "%d %B %Y")

# 输出 "July 31st, 2022"(配合ordinal包处理序数词)
library(ordinal)
paste0(format(x, "%B "), ordinal(day(x)), format(x, ", %Y"))

# 输出 "31st of July, '22"
paste0(ordinal(day(x)), " of ", format(x, "%B, '%y'"))

常用格式符说明:

  • %d:两位数字日期(01-31)
  • %B:完整月份名称(July)
  • %Y:四位数字年份(2022)
  • %y:两位数字年份(22)

2. 封装自定义函数(支持format参数)

如果你想要一个类似lubridate风格的函数,可以基于lubridate和glue封装,支持通过format参数灵活指定输出样式:

library(lubridate)
library(glue)
library(ordinal)

date_to_str <- function(date, format = "{day} {month_full} {year}") {
  glue_data(
    list(
      day = day(date),
      day_ord = ordinal(day(date)),
      month_full = month(date, label = TRUE, abbr = FALSE),
      month_abbr = month(date, label = TRUE),
      year = year(date),
      year_short = year(date) %% 100
    ),
    format
  )
}

# 使用示例
x <- ymd("2022-07-31")
date_to_str(x) # 输出:31 July 2022
date_to_str(x, "{month_abbr} {day_ord}, {year}") # 输出:Jul 31st, 2022
date_to_str(x, "{day_ord} of {month_full}, '{year_short}'") # 输出:31st of July, '22

3. 用clock包简化序数词处理

clock包对日期格式化的支持更友好,内置了序数词格式符%Do,无需额外包处理:

library(clock)
x <- date_today()

# 输出 "31 July 2022"
format(x, "%d %B %Y")

# 输出 "July 31st, 2022"
format(x, "%B %Do, %Y")

# 输出 "31st of July, '22"
paste0(format(x, "%Do"), " of ", format(x, "%B, '%y'"))

内容的提问来源于stack exchange,提问作者Karthik Thrikkadeeri

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 17:18:23