Skip to content

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=; 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)

See also  How to Distribute Halloween Candies in Java
Notify of
Inline Feedbacks
View all comments
Would love your thoughts, please comment.x