Skip to main content
  1. Problem Solving Solutions/

Reformat Date LeetCode Solution

·1 min
leetcode
Mayukh Datta
Author
Mayukh Datta
Table of Contents

Given a date string in the form Day Month Year, where:

  • Day is in the set {"1st", "2nd", "3rd", "4th", ..., "30th", "31st"}.
  • Month is in the set {"Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"}.
  • Year is in the range [1900, 2100].

Convert the date string to the format YYYY-MM-DD, where:

  • YYYY denotes the 4 digit year.
  • MM denotes the 2 digit month.
  • DD denotes the 2 digit day.

Example 1:

Input: date = “20th Oct 2052” Output: “2052-10-20”

Example 2:

Input: date = “6th Jun 1933” Output: “1933-06-06”

Example 3:

Input: date = “26th May 1960” Output: “1960-05-26”

Constraints:

  • The given dates are guaranteed to be valid, so no error handling is necessary.

Link: https://leetcode.com/problems/reformat-date/

Solution in Java #

class Solution { public String reformatDate(String date) {

    String\[\] monthArray = {"", "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"};
    List<String> list = Arrays.asList(monthArray);
    
    String\[\] split = date.split(" ");
    String day = split\[0\].replaceAll("\\\\D", "");
    // \\D means "not digit" in regex
    int month = list.indexOf(split\[1\]);
    
    // "%02d" means if length of the argument is less than 2 then pad with a zero
    return split\[2\] + "-" + String.format("%02d", month) + "-" + String.format("%02d", Integer.parseInt(day));
}

}