Use the Java standard timezones for all settings.
I would recommend storing the dates and times in the database in the time zone that the server is configured in.
i.e. if your server is in London, use GMT to store all dates and times
Each user could potentially have their own timezone. i.e. users in Eastern US, users in Auckland.
You can then convert from any user time zone to the known server time zone to the user time zone.
You can store the server time zone in some sort of application configuration file for ease of reference.
- Easy to query the date based on a date range:
If the users timezone is know, you can just do a conversion to the server timezone in your application when the query is being completed. Pass through the converted date and time to your query.
- Show the date with the client appropriate time zone:
Once the queries are returned, you can convert them to the user time zone and display in their own time.
The java docs have sample code on how to do the conversion between time zones.