Как я могу определить смещение UTC с помощью Joda?

Я хотел бы получить строку в форме -5:00 (если мы в Нью-Йорке, например). Какой лучший способ сделать это с помощью Joda?

Ответ 1

Не уверен, что это лучший способ, но здесь один метод:

DateTimeFormatter dtf = DateTimeFormat.forPattern("ZZ");

DateTimeZone zone;

zone = DateTimeZone.forID("America/Los_Angeles");
System.out.println(dtf.withZone(zone).print(0));  // Outputs -08:00

zone = DateTimeZone.forOffsetHoursMinutes(-5, 0);
System.out.println(dtf.withZone(zone).print(0)); // Outputs -05:00

DateTime dt = DateTime.now();
System.out.println(dtf.print(dt)); // Outputs -05:00 (time-zone dependent)

Приведенный ниже пример не включает начальный ноль в часы. Если это то, что вы действительно спрашиваете (как исключить начальный ноль), тогда я не помогаю.

Ответ 2

Простой способ получения смещения в часы

public static String getCurrentTimeZoneOffset() {

    DateTimeZone tz = DateTimeZone.getDefault();
    Long instant = DateTime.now().getMillis();

    long offsetInMilliseconds = tz.getOffset(instant);
    long hours = TimeUnit.MILLISECONDS.toHours( offsetInMilliseconds );
    String offset = Long.toString( hours );

    return offset + " Hours";

}

Пара предупреждений:

  • Это получает значение по умолчанию DateTimeZone от JodaTime. Вы можете изменить его, чтобы принять определенный DateTimeZone, который передается в метод.
  • Это возвращает его в формате "-7 часов", но вы можете отформатировать его, как вы видите, достаточно легко.

Надеюсь, что это поможет.

В JP