problem: Java Date and Time

Link to the problem

Input would be month day year, and output the day of week.

//sample input
08 05 2015
//sample output
WEDNESDAY
//sample input
08 05 2015

//sample output
WEDNESDAY
//sample input 08 05 2015 //sample output WEDNESDAY

Enter fullscreen mode Exit fullscreen mode


proper solution

DISCLAIMER: the solution referenced from the editorial

<span>public</span> <span>static</span> <span>String</span> <span>findDay</span><span>(</span><span>int</span> <span>year</span><span>,</span> <span>int</span> <span>month</span><span>,</span> <span>int</span> <span>day</span><span>)</span> <span>{</span>
<span>Calendar</span> <span>date</span> <span>=</span> <span>Calendar</span><span>.</span><span>getInstance</span><span>();</span>
<span>date</span><span>.</span><span>set</span><span>(</span><span>year</span><span>,</span> <span>month</span><span>,</span> <span>day</span><span>);</span>
<span>return</span> <span>date</span><span>.</span><span>get</span><span>(</span><span>Calendar</span><span>.</span><span>DAY_OF_WEEK</span><span>);</span> <span>//error</span>
<span>}</span>
<span>public</span> <span>static</span> <span>String</span> <span>findDay</span><span>(</span><span>int</span> <span>year</span><span>,</span> <span>int</span> <span>month</span><span>,</span> <span>int</span> <span>day</span><span>)</span> <span>{</span>
    <span>Calendar</span> <span>date</span> <span>=</span> <span>Calendar</span><span>.</span><span>getInstance</span><span>();</span>
    <span>date</span><span>.</span><span>set</span><span>(</span><span>year</span><span>,</span> <span>month</span><span>,</span> <span>day</span><span>);</span>
    <span>return</span> <span>date</span><span>.</span><span>get</span><span>(</span><span>Calendar</span><span>.</span><span>DAY_OF_WEEK</span><span>);</span> <span>//error</span>
<span>}</span>
public static String findDay(int year, int month, int day) { Calendar date = Calendar.getInstance(); date.set(year, month, day); return date.get(Calendar.DAY_OF_WEEK); //error }

Enter fullscreen mode Exit fullscreen mode

The code would have error because date.get(Calendar.DAY_OF_WEEK) returns integer value of day of week. For example, returns 1 for SUNDAY, 2 for MONDAY, and 7 for SATURDAY.

We need to create an additional array to reference day of week:

<span>// outside main method</span>
<span>static</span> <span>String</span><span>[]</span> <span>dayOfWeek</span> <span>=</span> <span>{</span><span>"SUNDAY"</span><span>,</span> <span>"MONDAY"</span><span>,</span> <span>"TUESDAY"</span><span>,</span> <span>"WEDNESDAY"</span><span>,</span> <span>"THURSDAY"</span><span>,</span> <span>"FRIDAY"</span><span>,</span> <span>"SATURDAY"</span><span>};</span>
<span>public</span> <span>static</span> <span>String</span> <span>findDay</span><span>(</span><span>int</span> <span>year</span><span>,</span> <span>int</span> <span>month</span><span>,</span> <span>int</span> <span>day</span><span>)</span> <span>{</span>
<span>Calendar</span> <span>date</span> <span>=</span> <span>Calendar</span><span>.</span><span>getInstance</span><span>();</span>
<span>date</span><span>.</span><span>set</span><span>(</span><span>year</span><span>,</span> <span>month</span><span>,</span> <span>day</span><span>);</span>
<span>return</span> <span>dayOfWeek</span><span>[</span><span>date</span><span>.</span><span>get</span><span>(</span><span>Calendar</span><span>.</span><span>DAY_OF_WEEK</span><span>)-</span><span>1</span><span>];</span>
<span>}</span>
<span>// outside main method</span>
<span>static</span> <span>String</span><span>[]</span> <span>dayOfWeek</span> <span>=</span> <span>{</span><span>"SUNDAY"</span><span>,</span> <span>"MONDAY"</span><span>,</span> <span>"TUESDAY"</span><span>,</span> <span>"WEDNESDAY"</span><span>,</span> <span>"THURSDAY"</span><span>,</span> <span>"FRIDAY"</span><span>,</span> <span>"SATURDAY"</span><span>};</span>

<span>public</span> <span>static</span> <span>String</span> <span>findDay</span><span>(</span><span>int</span> <span>year</span><span>,</span> <span>int</span> <span>month</span><span>,</span> <span>int</span> <span>day</span><span>)</span> <span>{</span>
    <span>Calendar</span> <span>date</span> <span>=</span> <span>Calendar</span><span>.</span><span>getInstance</span><span>();</span>
    <span>date</span><span>.</span><span>set</span><span>(</span><span>year</span><span>,</span> <span>month</span><span>,</span> <span>day</span><span>);</span>
    <span>return</span> <span>dayOfWeek</span><span>[</span><span>date</span><span>.</span><span>get</span><span>(</span><span>Calendar</span><span>.</span><span>DAY_OF_WEEK</span><span>)-</span><span>1</span><span>];</span>
<span>}</span>
// outside main method static String[] dayOfWeek = {"SUNDAY", "MONDAY", "TUESDAY", "WEDNESDAY", "THURSDAY", "FRIDAY", "SATURDAY"}; public static String findDay(int year, int month, int day) { Calendar date = Calendar.getInstance(); date.set(year, month, day); return dayOfWeek[date.get(Calendar.DAY_OF_WEEK)-1]; }

Enter fullscreen mode Exit fullscreen mode


use another class

Instead of the class java.util.Calendar it mentioned, java.time.LocalDate (Java 8 and higher) actually finish all the work nice and neat.

<span>public</span> <span>static</span> <span>String</span> <span>findDay</span><span>(</span><span>int</span> <span>year</span><span>,</span> <span>int</span> <span>month</span><span>,</span> <span>int</span> <span>day</span><span>)</span> <span>{</span>
<span>LocalDate</span> <span>date</span> <span>=</span> <span>LocalDate</span><span>.</span><span>of</span><span>(</span><span>year</span><span>,</span> <span>month</span><span>,</span> <span>day</span><span>);</span>
<span>return</span> <span>date</span><span>.</span><span>getDayOfWeek</span><span>().</span><span>toString</span><span>();</span> <span>//getDayOfWeek() returns a DayOfWeek object</span>
<span>}</span>
<span>public</span> <span>static</span> <span>String</span> <span>findDay</span><span>(</span><span>int</span> <span>year</span><span>,</span> <span>int</span> <span>month</span><span>,</span> <span>int</span> <span>day</span><span>)</span> <span>{</span>
    <span>LocalDate</span> <span>date</span> <span>=</span> <span>LocalDate</span><span>.</span><span>of</span><span>(</span><span>year</span><span>,</span> <span>month</span><span>,</span> <span>day</span><span>);</span>
    <span>return</span> <span>date</span><span>.</span><span>getDayOfWeek</span><span>().</span><span>toString</span><span>();</span> <span>//getDayOfWeek() returns a DayOfWeek object</span>
<span>}</span>
public static String findDay(int year, int month, int day) { LocalDate date = LocalDate.of(year, month, day); return date.getDayOfWeek().toString(); //getDayOfWeek() returns a DayOfWeek object }

Enter fullscreen mode Exit fullscreen mode

原文链接:problem: Java Date and Time

© 版权声明
THE END
喜欢就支持一下吧
点赞10 分享
In the face of difficulties, be brave, persistent and tirelessly to overcome it.
面对困难的时候,要勇敢、执着、不畏艰辛地去战胜它
评论 抢沙发

请登录后发表评论

    暂无评论内容