package com.youngdream.algorithm.simple.string; /** * @author YD * @email 994300880@qq.com * @date 2020/7/17 13:43 */ public class ReformatDate { /** * 给你一个字符串 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 的格式,其中: * YYYY 表示 4 位的年份。 * MM 表示 2 位的月份。 * DD 表示 2 位的天数。 * <p> * 示例 1: * 输入:date = "20th Oct 2052" * 输出:"2052-10-20" * <p> * 示例 2: * 输入:date = "6th Jun 1933" * 输出:"1933-06-06" * <p> * 示例 3: * 输入:date = "26th May 1960" * 输出:"1960-05-26" * * 提示: * 给定日期保证是合法的,所以不需要处理异常输入。 * * @param date 给定字符串 * @return 转变后的字符串 */ public String reformatDate(String date) { int len = date.length(); StringBuilder sb = new StringBuilder(); //添加年 sb.append(date, len - 4, len); sb.append('-'); //添加月 sb.append(getNumber(date.substring(len - 8, len - 5))); sb.append('-'); //添加日 if (len == 12) { sb.append('0'); } sb.append(date, 0, len - 11); //正则影响性能 // String[] s = date.split(" "); // String day = s[0]; // if (day.length() == 3) { // day = "0" + day.charAt(0); // } else { // day = day.substring(0, 2); // } // String month = getNumber(s[1]); // String year = s[2]; // return year + "-" + month + "-" + day; return sb.toString(); } String getNumber(String month) { switch (month) { case "Jan": return "01"; case "Feb": return "02"; case "Mar": return "03"; case "Apr": return "04"; case "May": return "05"; case "Jun": return "06"; case "Jul": return "07"; case "Aug": return "08"; case "Sep": return "09"; case "Oct": return "10"; case "Nov": return "11"; default: return "12"; } } }