Преобразование времени UTC со смещением в LocalTime

Я использую joda 2.7, я хочу конвертировать

      UTC Time= 09:30:10-06:00
   to Local Time= 03:30:10
         and
      UTC Time=10:45:00+07:30
   to Local Time = 18:15:00

Я пробовал разные форматы, как joda, так и мои собственные, и методы для обработки части смещения, но я не могу получить требуемый результат. Каков наилучший подход.


person yellow    schedule 30.03.2017    source источник


Ответы (1)


Ты можешь сделать:

DateTimeFormatter fmt = DateTimeFormat.forPattern("HH:mm:ssZ");
String utcTime = "09:30:10-06:00";
DateTime localTime = fmt.parseDateTime(utcTime);
String localTimeString = localTime.toString("HH:mm:ss");

Это преобразует его в ваше местное время в соответствии с вашим часовым поясом по умолчанию (выполните System.out.println(DateTimeZone.getDefault()), чтобы проверить, какой у вас часовой пояс по умолчанию).

Если вы хотите преобразовать в другой часовой пояс, вам нужно сделать что-то вроде:

DateTimeFormatter fmt = DateTimeFormat.forPattern("HH:mm:ssZ").withZone(/*DateTimeZone you want*/);

В ваших конкретных случаях, чтобы получить желаемый результат, вам просто нужно использовать часовой пояс, в котором у вас есть желаемые результаты:

DateTimeFormatter fmt = DateTimeFormat.forPattern("HH:mm:ssZ").withZone(DateTimeZone.forOffsetHours(-12));

String utcTime = "09:30:10-06:00";
DateTime localTime = fmt.parseDateTime(utcTime);
System.out.println(localTime.toString("HH:mm:ss"));

utcTime = "10:45:00+07:30";
localTime = fmt.withZone(DateTimeZone.forOffsetHours(15)).parseDateTime(utcTime);
System.out.println(localTime.toString("HH:mm:ss"));

Выход:

03:30:10
18:15:00
person Community    schedule 30.03.2017
comment
хорошо, когда я попробовал это, я получаю время 08:30:10, это правильно? Я хочу, чтобы время было 03:30:10 - person yellow; 30.03.2017
comment
это работает, как вы рассчитываете часы смещения? Я имею в виду, если я получаю любое время с любым смещением, как я могу обобщить выбор шага смещения. - person yellow; 30.03.2017
comment
это + или- (2*время смещения)? - person yellow; 30.03.2017
comment
Я думаю, что трудно обобщать только эти 2 примера. В первом вы конвертируете из GMT-6 в GMT-12, или на 6 часов позже. Во втором вы конвертируете из GMT +7:30 в GMT +15 (на 7,5 часов вперед). Вам нужно получить все возможные случаи и попытаться обобщить и получить для них формулу (если возможно) или обрабатывать каждый случай индивидуально, в зависимости от того, что вам нужно. Удвоение текущего смещения работает для этих двух случаев, но будет ли оно работать для всех случаев, которые вы хотите? (Я предполагаю, что у вас может быть больше разных случаев, если нет, то приведенного выше кода должно быть достаточно) - person ; 31.03.2017