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

在R语言中将%B-%d-%Y-%I:%M-%p格式的字符型日期转换为%Y%m%d格式的方法咨询

没问题,我来帮你搞定这个日期转换的需求!

解决方案

首先确认一下,执行完removeWords后,你的my_date会变成类似"December 02, 2017 07:33PM"的格式(注意年份和时间之间有两个空格)。接下来我们可以通过解析字符为日期对象→格式化目标格式两步完成转换,这里提供两种实用方法:

方法一:基础R工具(无需额外安装包)

基础R的strptime()可以把字符型日期解析成标准日期时间对象,再用strftime()输出你需要的%Y%m%d格式:

# 先执行你已有的处理步骤
my_date = c("December 02, 2017 at 07:33PM")
library(tm)
stopwords = c("at")
my_date = removeWords(my_date, stopwords)

# 解析为日期时间对象,用%*忽略年份和时间之间的任意空格
date_obj <- strptime(my_date, format = "%B %d, %Y %*%I:%M%p")

# 格式化为目标的%Y%m%d格式
formatted_date <- strftime(date_obj, format = "%Y%m%d")
print(formatted_date)
# 输出结果:"20171202"

小说明:

  • %B:匹配英文月份全称(比如December)
  • %d:匹配两位数字的日期
  • %Y:匹配四位数字的年份
  • %*:自动忽略任意数量的空格(避免因移除"at"后产生的多空格导致匹配失败)
  • %I:匹配12小时制的两位小时数
  • %M:匹配两位数字的分钟数
  • %p:匹配AM/PM标识

方法二:用lubridate包(更简洁直观)

如果你经常处理日期时间,lubridate包的语法会更省心,不需要死记复杂的格式符:

# 先安装并加载lubridate(首次使用需安装)
# install.packages("lubridate")
library(lubridate)

# 执行你已有的处理步骤
my_date = c("December 02, 2017 at 07:33PM")
library(tm)
stopwords = c("at")
my_date = removeWords(my_date, stopwords)

# 自动识别格式并解析为日期时间对象
date_obj <- mdy_hm(my_date, tz = "UTC")

# 格式化为目标格式
formatted_date <- format(date_obj, "%Y%m%d")
print(formatted_date)
# 输出结果:"20171202"

小说明:

  • mdy_hm():代表字符串格式是月(全称)-日-年-小时-分钟,lubridate会自动处理空格和标点
  • tz = "UTC":指定时区避免本地时区干扰,你也可以换成自己需要的时区(比如"Asia/Shanghai")

额外小贴士

如果移除"at"后字符串的空格数量不稳定,可以先执行my_date <- gsub("\\s+", " ", my_date)把多余空格替换成单个空格,再进行解析,这样格式匹配会更稳妥。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.01 00:29:06