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