JDSL (Библиотека структур данных в Java) должен быть достаточно хорошим, если Вы в алгоритмы графика - http://www.cs.brown.edu/cgc/jdsl/
Я бы рекомендовал использовать часовой пояс сервера или UTC, а не хранить разные данные для каждого пользователя. Таким образом, ваша база данных будет полностью согласованной, и вы сможете выполнять некоторые операции, такие как сравнения, без необходимости для каждой записи извлекать столбец user_timezone и выполнять преобразование (что не является полностью бесплатным)
Использовать UTC . Это избавит вас от многих часов разочарования.
Местное время пользователя - это вопрос представления - для данного пользователя гораздо проще преобразовать в / из местного времени, чем отслеживать TZ полей даты каждой записи в база данных.
Даже если использование часового пояса сервера может показаться заманчивым, правила DST могут измениться в кратчайшие сроки очень (см .: Аргентина DST 2009 - правительство приняло решение не использовать Летнее время, примерно за 1 неделю до предполагаемого срока); в некоторых случаях может измениться сам часовой пояс (см. Время в Индиане ). Вряд ли определение UTC претерпит такие радикальные изменения.
(История о серверном времени и местном времени: сервер был на западном побережье США, он был перемещен на восточное побережье США; приложения использовали серверное время; все разразилось адом. С помощью виртуализации можно легко и быстро перемещать серверы на разные континенты .)