Determine the Date by the Day Number in Java

The challenge

What date corresponds to the nth day of the year?
The answer depends on whether the year is a leap year or not.

Write a function that will help you determine the date if you know the number of the day in the year, as well as whether the year is a leap year or not.
The function accepts the day number and a boolean value isLeap as arguments, and returns the corresponding date of the year as a string "Month, day".
Only valid combinations of a day number and isLeap will be tested.


// 41st day of non-leap year is February, 10 getDay(41, false) => "February, 10" // 60th day of non-leap year is March, 1 getDay(60, false) => "March, 1" // 60th day of leap year is February, 29 getDay(60, true) => "February, 29" // 365th day of non-leap year is December, 31 getDay(365, false) => "December, 31" // 366th day of leap year is December, 31 getDay(366, true) => "December, 31"
Code language: Java (java)

The solution in Java code

Option 1:

import java.time.LocalDate; import java.time.DateTimeException; import java.time.format.DateTimeFormatter; public class Solution { private static final DateTimeFormatter format = DateTimeFormatter.ofPattern("LLLL, d"); public static String getDay(int day, boolean isLeap) { return format.format(LocalDate.ofYearDay(isLeap ? 2000 : 1999, day)); } }
Code language: Java (java)

Option 2:

public class Solution { public static String getDay(int day, boolean isLeap) { int[] days = {31, isLeap ? 29 : 28, 31,30,31,30,31,31,30,31,30,31}; String[] months = {"January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"}; int i; for(i=0; i<12; i++){ if(day <= days[i]) break; day -= days[i]; } return months[i] + ", " + day; } }
Code language: Java (java)

Option 3:

import static java.time.LocalDate.ofYearDay; import static java.time.format.DateTimeFormatter.ofPattern; interface Solution { static String getDay(int day, boolean isLeap) { return ofPattern("LLLL, d").format(ofYearDay(isLeap ? 2020 : 2021, day)); } }
Code language: Java (java)

Test cases to validate our solution

import org.junit.jupiter.api.Test; import static org.junit.jupiter.api.Assertions.assertEquals; class SolutionTest { @Test void basicTest() { assertEquals("January, 15", Solution.getDay(15, false)); assertEquals("February, 10", Solution.getDay(41, false)); assertEquals("February, 28", Solution.getDay(59, false)); assertEquals("March, 1", Solution.getDay(60, false)); assertEquals("February, 29", Solution.getDay(60, true)); assertEquals("December, 31", Solution.getDay(365, false)); assertEquals("December, 31", Solution.getDay(366, true)); } }
Code language: Java (java)
Notify of
Inline Feedbacks
View all comments