мне нужно найти точку во времени, когда он будет следующий будет 7:00 утра в Окленде (Новая Зеландия)JodaTime: как найти будущее время в другой часовой пояс
Я используя Joda времени 2,6
<dependency>
<groupId>joda-time</groupId>
<artifactId>joda-time</artifactId>
<version>2.6</version>
</dependency>
при тестировании со следующими
import org.joda.time.DateTime;
import org.joda.time.DateTimeZone;
import org.joda.time.format.DateTimeFormat;
import org.joda.time.format.DateTimeFormatter;
public class FindDateTimeInFuture {
static DateTimeFormatter formatter = DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss.SSS z Z");
public static void main(String[] args) {
// Use UTC as application wide default
DateTimeZone.setDefault(DateTimeZone.UTC);
System.out.println("now UTC = " + formatter.print(DateTime.now()));
System.out.println("now in Auckland = " + formatter.print(DateTime.now(DateTimeZone.forID("Pacific/Auckland"))));
System.out.println("7 AM Auckland = " + formatter.print(DateTime.now(DateTimeZone.forID("Pacific/Auckland")).withTime(7, 0, 0, 0)));
}
}
Если я бегу выше после Полночь в Окленде, это прекрасно, это
now UTC = 2016-09-01 13:37:26.844 UTC +0000
now in Auckland = 2016-09-02 01:37:26.910 NZST +1200
7 AM Auckland = 2016-09-02 07:00:00.000 NZST +1200
^ok, in the future
Но, если я бегу выше перед тем Полночь в Окленде, я получаю 7 утра в прошлом ...
now UTC = 2016-09-01 09:37:48.737 UTC +0000
now in Auckland = 2016-09-01 21:37:48.831 NZST +1200
7 AM Auckland = 2016-09-01 07:00:00.000 NZST +1200
^ko, in the past
Есть ли способ сказать joda-время идти вперед, когда меняет время?
Вы должны переименовать первый параметр для 00:30 более общего назначения, поскольку метод действительно не заботится о том, является ли значение «сейчас» или каким-то другим временем. Кроме того, если * следующая * часть имени метода должна быть взята буквально, тогда условие должно быть '! isAfter() ', потому что ваш текущий код возвращает входное значение, если это точно * точно заданный' hour'. – Andreas