Sunday, April 8, 2012

Java Dates - What"s the correct class to use?


So the whole Java Date/Calendar/GregorianCalendar thing is obviously a joke. What's the right Date class to use?



Edit: Building an SDK for third parties on Android where the application needs to provide a date



More Edit: Things that make this so obviously a joke:



  • 99% of Date is deprecated

  • Date's Year is offset from 1900

  • Date's Month is zero-indexed while day is one-indexed

  • Dates are mutable

  • You're supposed to use a Calendar to create a date...

  • ... except you really have to use a GregorianCalendar

    • Do a significant percent of developers want to use a different calendar?



  • Calendar.getTime() returns a Date

  • There's no Date math (like how far apart are two dates in years)

    • Messing with milliseconds since epoch doesn't count



  • You can't chain parts together to get an expression (like the date one year ago today)

  • Probably more stuff


Source: Tips4all

2 comments:

  1. Joda-Time. Even on Android.

    If you want to stick to JSE classes, it depends on what you're trying to do.

    Edit: You keep changing your question. Date and Calendar.

    ReplyDelete
  2. The "right" date type totally depends on your application; however, java.util.Calendar is generally accepted as the replacement for java.util.Date as it provides more functionality (especially regarding extraction of individual date elements like year, month, etc). In reality, Date can be much easier to use for certain situations (and is the one used by Java's own DateFormat classes), so it's a judgement call.

    It's not difficult to convert between the two so I would pick one and stick with it consistently for your API. If I were to pick one I'd use Date because it's the simplest, IMHO.

    ReplyDelete