One of the things I dislike most in Java is… unfriendly. DateTime manipulation is a typical example. I think at least one time, a Java developer will encounter this message: getYear() is deprecated.
Such a simple and often-heavily-used function is deprecated. So programmers must walk around by the Calendar class.
Calendar localCalendar = Calendar.getInstance(); Calendar utcCalendar = Calendar.getInstance(TimeZone.getTimeZone("UTC")); Date date = new Date(); localCalendar.setTime(date); utcCalendar.setTime(date); TimeZone localTimeZone = localCalendar.getTimeZone(); System.out.println("Year: " + localCalendar.get(Calendar.YEAR)); System.out.println("Month: " + localCalendar.get(Calendar.MONTH) + 1); System.out.println("Day: " + localCalendar.get(Calendar.DATE)); System.out.println("Day of week: " + localCalendar.get(Calendar.DAY_OF_WEEK)); System.out.println("Hour: " + localCalendar.get(Calendar.HOUR_OF_DAY)); System.out.println("Minute: " + localCalendar.get(Calendar.MINUTE)); System.out.println("Timezone: " + localTimeZone.getDisplayName()); System.out.println("UTC Hour: " + utcCalendar.get(Calendar.HOUR)); System.out.println("UTC Minute: " + utcCalendar.get(Calendar.MINUTE));
Although Java big heads all have valid reasons for this inconvenience – which is the complexity of time manipulation, I still think this way is over-killing. Yes, no computer is accurate enough to calculate the correct solar time. But we are no astronomy expert, who cares if the time lacks one or two leap seconds*? Daylight saving stuffs is still necessary, but shouldn’t be too much of a problem.
In the end, I think Java powerful libraries should also make it easy to do simple tasks, instead thinking ahead too much for easy enlargement later**. With the Internet as popular as today, I think we can safely calculate “simple” time only, leaving the task to do additional astronomy calculation for the big servers, and cover the gaps by synchronizing.
(*) Like leap year, a leap second is sometimes added to our current timeline to cover the gaps between solar year & normal year. Because a leap second is too small, people seldom notice. Reference: http://tycho.usno.navy.mil/leapsec.html
(**) Java has the reputation for easy scaling, and this is very true in my experience. On the opposite, small application is suddenly heavy at their very first cradle time, because a fair amount of efforts are put in “making room” for future changes.