Ваша проблема идет еще глубже, чем эта. форматирование любого типа объекта даты или времени без учета смещения часового пояса всегда неоднозначно. этот момент времени:
1.1.1970 00:00
можно интерпретировать (в UTC) как что-то от
1.1.1970 14:00 (in kiribati, UTC+14)
до
31.12.1969 12:00 (in honolulu, UTC -12)
, чтобы быть точным, вы быДОЛЖНО включать ЛИБО смещение часового пояса:
1970-01-01T00:00:00+00:00
соответствующий стандарт - ISO 8601 (https://en.wikipedia.org/wiki/ISO_8601), ИЛИ вы передаете ссылку как часть вашего контракта интерфейса (т. е. в документации, скажите что-нибудьстроки «все даты указаны в UTC»), что, честно говоря, довольно громоздко.
В большинстве ситуаций я сейчас использую миллисекунды эры или секунды эры для дат в API. Это делает его более понятнымкакой точный момент времени вы имеете в виду.
в некоторых ситуациях (например, при расчете часов работы магазина) вам также необходимо хранить информацию о часовом поясе отдельно и в идеале как конкретную ссылку на географический регион. местоположение (в форме «Америка / Нью-Йорк», а не «EST»), поскольку переход на летнее время может отличаться в зависимости от региона, даже если эти регионы иногда используют EST (например, в большинстве мест в США есть летнее время, в то время как в некоторых местах в Канаде EST остается в течение всего года) - дальнейшее чтение по http://web.cs.ucla.edu/~eggert/tz/tz-link.htm
объекту Java даты не знает о часовых поясах, пока вы не отформатируете его,в этот момент он (по умолчанию) использует системный часовой пояс для создания форматера по умолчанию.
то же самое относится и к датам синтаксического анализа: после синтаксического анализа вся информация о часовом поясе теряется.
TLDR:
короче говоря: полагаться на любое соглашение о часовом поясе, вероятно, не очень хорошая идея, вам, вероятно, следует рассмотреть возможность включения этого во все поля даты.
все это не относится конкретно к вашей проблеме, поскольку вы спрашиваете, как настроить GSON для использования сериализатора и десериализатора в глобальном масштабе. как обычно, это зависит от того, кто делает де / сериализацию.
эта статья может немного помочь:
https://futurestud.io/tutorials/gson-advanced-custom-serialization-part-1
однако я считаю, что подход "эра миллисекунды" намного проще: просто объявите поле типа "long"в качестве даты, и конвертировать в дату, когда вам это нужно. это также отлично работает для запросов к БД с <и>