Ruby日期格式互转:2018 Mar 28与2018-03-28转换方法
这个问题我碰到过好多次,本质就是日期字符串的解析与格式化转换,我给你用Python和JavaScript这两种最常用的语言分别演示两种转换的实现方式:
1. 将 "2018 Mar 28" 转为 "2018-03-28"
Python 实现
利用datetime模块的strptime(解析字符串为日期对象)和strftime(将日期对象格式化为字符串)方法:
from datetime import datetime # 原始日期字符串 original_str = "2018 Mar 28" # 解析:%Y=四位年份,%b=月份缩写(如Mar),%d=两位日期 date_obj = datetime.strptime(original_str, "%Y %b %d") # 格式化:%m=两位数字月份 target_str = date_obj.strftime("%Y-%m-%d") print(target_str) # 输出: 2018-03-28
小提示:如果你的Python环境默认是中文 locale,可能解析月份缩写会报错,可以提前设置:
import locale; locale.setlocale(locale.LC_TIME, 'en_US.UTF-8')
JavaScript 实现
需要先手动映射月份缩写到数字(因为JS的Date对象月份是0开始的),再格式化补零:
const originalStr = "2018 Mar 28"; const [year, monthAbbr, day] = originalStr.split(' '); // 月份缩写映射表 const monthMap = { Jan: 0, Feb: 1, Mar: 2, Apr: 3, May: 4, Jun: 5, Jul: 6, Aug: 7, Sep: 8, Oct: 9, Nov: 10, Dec: 11 }; // 创建Date对象 const dateObj = new Date(year, monthMap[monthAbbr], day); // 格式化:补零确保月份和日期是两位 const formattedMonth = String(dateObj.getMonth() + 1).padStart(2, '0'); const formattedDay = String(dateObj.getDate()).padStart(2, '0'); const targetStr = `${year}-${formattedMonth}-${formattedDay}`; console.log(targetStr); // 输出: 2018-03-28
2. 将 "2018-03-28" 转为 "2018 Mar 28"
Python 实现
同样用datetime模块的解析和格式化方法,只是换一下格式符:
from datetime import datetime original_str = "2018-03-28" # 解析:%Y-%m-%d是标准的ISO日期格式 date_obj = datetime.strptime(original_str, "%Y-%m-%d") # 格式化:%b输出月份缩写 target_str = date_obj.strftime("%Y %b %d") print(target_str); // 输出: 2018 Mar 28
JavaScript 实现
可以用Intl.DateTimeFormat来快速生成带月份缩写的格式,或者手动映射:
方法一:用Intl.DateTimeFormat(推荐)
const originalStr = "2018-03-28"; const dateObj = new Date(originalStr); // 配置格式化规则:英文环境,年份数字,月份缩写,日期数字 const formatter = new Intl.DateTimeFormat('en-US', { year: 'numeric', month: 'short', day: 'numeric' }); // 调整输出顺序并去掉默认逗号 const parts = formatter.formatToParts(dateObj); const year = parts.find(p => p.type === 'year').value; const month = parts.find(p => p.type === 'month').value; const day = parts.find(p => p.type === 'day').value; const targetStr = `${year} ${month} ${day}`; console.log(targetStr); // 输出: 2018 Mar 28
方法二:手动映射月份缩写
const originalStr = "2018-03-28"; const dateObj = new Date(originalStr); const monthAbbrs = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']; const year = dateObj.getFullYear(); const month = monthAbbrs[dateObj.getMonth()]; const day = dateObj.getDate(); const targetStr = `${year} ${month} ${day}`; console.log(targetStr); // 输出: 2018 Mar 28
内容的提问来源于stack exchange,提问作者Fatna
相关产品推荐
相关产品推荐

