Well, in our application (Which is admittedly not a Play app) we recently added timezones and this is something
that you have to do right.
Our app allows for the concept of timezone-naive and timezone-aware datetimes. Datetimes that are timezone aware
are accompanied by a field that stores the Olson name of the timezone. Datetimes themselves are stored in their UTC
form.
For timezone-aware datetimes:
On the UI side our app attempts to determine the client timezone using the browser (Which usually works at this point).
Datetimes submitted by the client of a local datetime along with the timezone.
On the server this is converted to UTC + timezone before being stored.
When retrieved the UTC datetime + timezone is transformed into the relevant local datetime + timezone before the client sees it.
For timezone-naive datetimes:
Everything is basically the same except the timezone is basically hard-locked to the local timezone of the server.
Another thing to note is that some databases (Postgresql) understand the concept of a timezone aware datetime and support it,
while others do not.
Finally, what is the timezone of your local laptop?