LeetCode1507 转变日期格式
破解独特日期格式转换难题
在 Java 编程的征程中,处理日期格式犹如攀登崎岖山路,时不时就会遇到些棘手状况。今天,就迫不及待地要和大家分享一道超具代表性的日期格式转换题目,相信跟着思路走一趟,你对日期处理这一块儿的技能肯定能直线飙升。
题目详情
给定一个字符串 date
,它遵循着特定的 “Day Month Year” 格式。这里面的门道可不少,Day
带着各种序数后缀,像 {"1st", "2nd", "3rd", "4th",..., "30th", "31st"} 这些,个性十足;Month
呢,是从 {"Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"} 中选取;Year
也被框定在 [1900, 2100] 这个范围里。咱们的终极目标,就是要施展编程魔法,把它华丽变身为通用的 “YYYY-MM-DD” 格式。
解题妙法剖析
接下来,深入探究一下攻克这道题的巧妙思路,总共分三步:
拆解字符串获取关键信息
首先,得把这个看似复杂的 date
字符串大卸八块,从中精准提取出日、月、年的信息。这时候,Java 里的 split(" ")
方法就派上用场啦,它像一把锋利的手术刀,沿着空格将字符串完美切割,得到的数组 parts
里,依次存放着日、月、年的原始信息。比如说,对于输入 “15th Aug 2025”,切割后 parts[0]
就是 “15th”,parts[1]
是 “Aug”,parts[2]
为 “2025”,是不是很清晰?
精心处理日与月的信息
拿到原始信息后,就得对其深加工了。先看日的处理,用 substring
方法把 Day
中的序数后缀利落地切除,只留下纯粹的数字。要是这数字孤孤单单只有一位,那必须得给它在前面加个 “0”,让它以两位数的优雅姿态登场。比如 “5th”,处理后就变成 “05”。
再轮到月的转换,面对 Month
的英文缩写,switch
语句挺身而出,化身为专业翻译官,将每个英文缩写精准对应到 1 - 12 的数字月份。像 “Jan” 对应 1,“Feb” 对应 2,以此类推,绝不出错。
按标准格式拼接成果
经过前面的精细打磨,日、月、年的信息都已准备就绪,最后一步,就是用 String.format
这个强大工具,按照 “YYYY-MM-DD” 的经典模板,把它们严丝合缝地拼接起来。比如,年是 “2025”,月经过处理变成 “08”,日是 “05”,拼接后输出的就是 “2025-08-05”,完美符合要求。
代码实例呈现
下面,就是用 Java 实现上述精彩思路的代码,赶紧来瞅瞅:
class Solution {
public String reformatDate(String date) {
// 按空格拆分日期字符串
String[] parts = date.split(" ");
// 处理日,去除序数后缀,确保两位数格式
String day = parts[0].substring(0, parts[0].length() - 2);
if (day.length() == 1) {
day = "0" + day;
}
// 转换月,英文缩写变数字月份
String monthStr = parts[1];
int month = 0;
switch (monthStr) {
case "Jan":
month = 1;
break;
case "Feb":
month = 2;
break;
case "Mar":
month = 3;
break;
case "Apr":
month = 4;
break;
case "May":
month = 5;
break;
case "Jun":
month = 6;
break;
case "Jul":
month = 7;
break;
case "Aug":
month = 8;
break;
case "Sep":
month = 9;
break;
case "Oct":
month = 10;
break;
case "Nov":
month = 11;
break;
case "Dec":
month = 12;
break;
}
// 提取年
String year = parts[2];
// 按标准格式拼接结果
return String.format("%s-%02d-%s", year, month, day);
}
}
public class Main {
public static void main(String[] args) {
Solution solution = new Solution();
String date = "15th Aug 2025"; // 这里可以替换成你想要测试的日期字符串
String result = solution.reformatDate(date);
System.out.println(result);
}
}
Solution
类里的reformatDate
方法实现了具体的日期格式转换逻辑,前面已经详细介绍过其思路和步骤。Main
类中的main
方法是程序的入口点,在这里创建了Solution
类的实例,然后传入一个测试的日期字符串调用reformatDate
方法进行转换,并将转换后的结果输出打印。
深度总结与拓展畅想
通过搞定这道题,咱们在 Java 日期处理领域可是迈出了坚实的一大步。不仅熟练掌握了字符串分割、截取、拼接这些基础操作,还学会了如何依据特定规则巧妙转换日期格式,利用 switch
语句应对多分支情况。
但探索的脚步可不能就此停歇,还有广阔天地等着我们去开拓呢!要是输入的日期格式更加五花八门,比如夹杂着中文月份、其他语言的序数词,又该如何巧妙化解?再或者,从性能优化的角度出发,如果要降低时间复杂度和空间复杂度,有没有奇思妙想?不妨动动脑子,动手改改代码,相信每一次尝试都会让你在编程之路上越走越远,越攀越高