java 8 DateTime

With Java < 8, you would need to write something like:

<span class="typ" style="margin: 0px;padding: 0px;border: 0px;color: #2b91af">Calendar</span><span class="pln" style="margin: 0px;padding: 0px;border: 0px;color: #000000"> cal </span><span class="pun" style="margin: 0px;padding: 0px;border: 0px;color: #000000">=</span> <span class="typ" style="margin: 0px;padding: 0px;border: 0px;color: #2b91af">Calendar</span><span class="pun" style="margin: 0px;padding: 0px;border: 0px;color: #000000">.</span><span class="pln" style="margin: 0px;padding: 0px;border: 0px;color: #000000">getInstance</span><span class="pun" style="margin: 0px;padding: 0px;border: 0px;color: #000000">();</span><span class="pln" style="margin: 0px;padding: 0px;border: 0px;color: #000000">cal</span><span class="pun" style="margin: 0px;padding: 0px;border: 0px;color: #000000">.</span><span class="pln" style="margin: 0px;padding: 0px;border: 0px;color: #000000">set</span><span class="pun" style="margin: 0px;padding: 0px;border: 0px;color: #000000">(</span><span class="typ" style="margin: 0px;padding: 0px;border: 0px;color: #2b91af">Calendar</span><span class="pun" style="margin: 0px;padding: 0px;border: 0px;color: #000000">.</span><span class="pln" style="margin: 0px;padding: 0px;border: 0px;color: #000000">HOUR</span><span class="pun" style="margin: 0px;padding: 0px;border: 0px;color: #000000">,</span><span class="pln" style="margin: 0px;padding: 0px;border: 0px;color: #000000"> cal</span><span class="pun" style="margin: 0px;padding: 0px;border: 0px;color: #000000">.</span><span class="pln" style="margin: 0px;padding: 0px;border: 0px;color: #000000">get</span><span class="pun" style="margin: 0px;padding: 0px;border: 0px;color: #000000">(</span><span class="typ" style="margin: 0px;padding: 0px;border: 0px;color: #2b91af">Calendar</span><span class="pun" style="margin: 0px;padding: 0px;border: 0px;color: #000000">.</span><span class="pln" style="margin: 0px;padding: 0px;border: 0px;color: #000000">HOUR</span><span class="pun" style="margin: 0px;padding: 0px;border: 0px;color: #000000">)</span> <span class="pun" style="margin: 0px;padding: 0px;border: 0px;color: #000000">+</span> <span class="lit" style="margin: 0px;padding: 0px;border: 0px;color: #800000">2</span><span class="pun" style="margin: 0px;padding: 0px;border: 0px;color: #000000">);</span>

vs. with Java 8:

<span class="typ" style="margin: 0px;padding: 0px;border: 0px;color: #2b91af">LocalTime</span><span class="pln" style="margin: 0px;padding: 0px;border: 0px;color: #000000"> now </span><span class="pun" style="margin: 0px;padding: 0px;border: 0px;color: #000000">=</span> <span class="typ" style="margin: 0px;padding: 0px;border: 0px;color: #2b91af">LocalTime</span><span class="pun" style="margin: 0px;padding: 0px;border: 0px;color: #000000">.</span><span class="pln" style="margin: 0px;padding: 0px;border: 0px;color: #000000">now</span><span class="pun" style="margin: 0px;padding: 0px;border: 0px;color: #000000">();</span><span class="typ" style="margin: 0px;padding: 0px;border: 0px;color: #2b91af">LocalTime</span><span class="pln" style="margin: 0px;padding: 0px;border: 0px;color: #000000"> later </span><span class="pun" style="margin: 0px;padding: 0px;border: 0px;color: #000000">=</span><span class="pln" style="margin: 0px;padding: 0px;border: 0px;color: #000000"> now</span><span class="pun" style="margin: 0px;padding: 0px;border: 0px;color: #000000">.</span><span class="pln" style="margin: 0px;padding: 0px;border: 0px;color: #000000">plus</span><span class="pun" style="margin: 0px;padding: 0px;border: 0px;color: #000000">(</span><span class="lit" style="margin: 0px;padding: 0px;border: 0px;color: #800000">2</span><span class="pun" style="margin: 0px;padding: 0px;border: 0px;color: #000000">,</span><span class="pln" style="margin: 0px;padding: 0px;border: 0px;color: #000000"> HOURS</span><span class="pun" style="margin: 0px;padding: 0px;border: 0px;color: #000000">);</span>

The improvements are essentially on

  • readability:
    • Calendar.getInstance() is not very well named: it is hard to tell which instance you are getting without reading the Javadoc. LocalTime.now() is quite self-describing: you get a time and it is now.
    • To offset a date, you call an offsetting method (plus) whereas with the Calendar API, you have to manually change the fields of the object (in this example, the hour) which is error prone.
  • ease of use (see for example the table towards the bottom of this page for a comparison):
    • the Calendar API is complicated to use because it mixes concepts, such as a simple date (June 26th 2015) and an instant in time (June 26th 2015 at 10am UTC) – there isn’t a class for the former concept
    • The new Time API has a clear separation between the various date/time concepts
  • safety:
    • The Calendar API is not safe: nothing prevents you from writing cal.set(123, 2) which would throw a not-so-helpful ArrayOutOfBoundsException. The new API uses enums which solves that problem.
    • The new API uses immutable objects, which makes it thread safe.

Overall, the new API is significantly inspired from jodatime which has been the preferred Java Date API for quite some time now. You can also read this detailed comparison of Java (<1.8) date vs. JodaTime (most of it should apply to the Java 8 Date API).

참고 : http://www.oracle.com/technetwork/articles/java/jf14-date-time-2125367.html

답글 남기기

This site uses Akismet to reduce spam. Learn how your comment data is processed.