What is the Best Practice for manipulating and storing dates in Java? [duplicate]

The best practice is usually precisely NOT to think in term of heavy date objects but to store a point in time. This is typically done by storing a value that doesn’t suffer from corner cases nor from potential parsing problems. To do this, people usually store the number of milliseconds (or seconds) elapsed since a fixed point that we call the epoch (1970-01-01). This is very common and any Java API will always allow you to convert any kind of date to/from the time expressed in ms since the epoch.

That’s for storage. You can also store, for example, the user’s preferred timezone, if there’s such a need.

Now such a date in milliseconds, like:

System.out.println( System.currentTimeMillis() );
1264875453

ain’t very useful when it’s displayed to the end user, that’s for granted.

Which is why you use, for example, the example Joda time to convert it to some user-friendly format before displaying it to the end-user.

You asked for best practice, here’s my take on it: storing “date” objects in a DB instead of the time in milliseconds is right there with using floating point numbers to represent monetary amounts.

It’s usually a huge code smell.

So Joda time in Java is the way to manipulate date, yes. But is Joda the way to go to store dates? CERTAINLY NOT.

Leave a Comment