Вы можете легко обрабатывать часовые пояса с Joda Time .
Вы можете создать DateTimeFormatter с желаемым часовым поясом и использовать его для анализа строки. Экземпляры DateTime также могут быть преобразованы в другие часовые пояса .
Вы можете полностью игнорировать часовые пояса, используя LocalDateTime класс.
Также класс Period имеет такие методы, как toStandardSeconds () , toStandardDuration () , normalizedStandard () и т. Д. который "предполагает, что все недели - 7 дней, все дни - 24 часа, все часы - 60 минут, а все минуты - 60 секунд. Это не так, если рассматривать переход на летнее время, а также может быть неверным для некоторых необычных хронологии. Однако, он включен, поскольку это полезная операция для многих приложений и бизнес-правил. "
Вот как можно создать LocalDateTime без часового пояса либо напрямую, либо путем преобразования из экземпляра DateTime с часовым поясом.
LocalDateTime a1 = new LocalDateTime(1927, 12, 31, 0, 0, 0, 0);
LocalDateTime a2 = new LocalDateTime(1928, 1, 2, 0, 0, 0, 0);
System.out.println(a1);
System.out.println(a2);
System.out.println(Seconds.secondsBetween(a1, a2).getSeconds()); // 172800 == 60 * 60 * 24 * 2 == 2 days without leap seconds
DateTime b1 = new DateTime(1927, 12, 31, 0, 0, 0, 0, DateTimeZone.forID("Asia/Shanghai"));
DateTime b2 = new DateTime(1928, 1, 2, 0, 0, 0, 0, DateTimeZone.forID("Asia/Shanghai"));
System.out.println(b1);
System.out.println(b2);
System.out.println(Seconds.secondsBetween(b1, b2).getSeconds());
LocalDateTime c1 = b1.toLocalDateTime();
LocalDateTime c2 = b2.toLocalDateTime();
System.out.println(c1);
System.out.println(c2);
System.out.println(Seconds.secondsBetween(c1, c2).getSeconds());
Будет напечатано следующее. Обратите внимание на забавный часовой пояс в Шанхае до его настройки часового пояса в 1927 .
1927-12-31T00:00:00.000
1928-01-02T00:00:00.000
172800
1927-12-31T00:00:00.000+08:05:52
1928-01-02T00:00:00.000+08:00
173152
1927-12-31T00:00:00.000
1928-01-02T00:00:00.000
172800