Как разбить временной интервал Java на промежутки времени DST [duplicate]

С выпуском Java 8 теперь есть третий вариант.

Runnable - функциональный интерфейс , что означает, что его экземпляры могут быть созданы с помощью лямбда выражения или ссылки на методы.

Ваш пример может быть заменен на:

new Thread(() -> { /* Code here */ }).start()

или если вы хотите использовать ExecutorService и ссылку на метод:

executor.execute(runner::run)

Они не только намного короче, чем ваши примеры, но также обладают многими преимуществами, изложенными в других ответах на использование Runnable по сравнению с Thread, например, с одной ответственностью и использованием композиции, потому что вы не специализируетесь на Поведение потока. Этот способ также позволяет избежать создания дополнительного класса, если все, что вам нужно, это Runnable, как и в ваших примерах.

11
задан Tunaki 3 August 2016 в 14:48
поделиться

1 ответ

Метод ZoneRules.getTransitions() не перечисляет все переходы до бесконечности в будущее (очевидно). Это получает следующие два перехода:

ZoneId zoneId = ZoneId.of("Australia/Sydney");
ZoneRules rules = zoneId.getRules();

ZoneOffsetTransition nextTransition = rules.nextTransition(Instant.now());
System.out.println("Next transition at: " +
        nextTransition.getInstant().atZone(zoneId));

ZoneOffsetTransition nextNextTransition =
        rules.nextTransition(nextTransition.getInstant());
System.out.println("Next transition after that at: " +
        nextNextTransition.getInstant().atZone(zoneId));

Выход:

Следующий переход по адресу: 2016-10-02T03: 00 + 11: 00 [Австралия / Сидней]

Следующий переход после этого: 2017-04-02T02: 00 + 10: 00 [Австралия / Сидней]

14
ответ дан Jesper 20 August 2018 в 10:04
поделиться
  • 1
    да, по-прежнему удивлен «getTransitions», по крайней мере, не перечислил все до сегодняшнего дня (т.е. все прошлое) - спасибо за решение, отлично работает. – pstanton 3 August 2016 в 07:42
  • 2
    getTransitions() (или ни один существующий getFutureTransitions()) - лучший пример, который я когда-либо видел, что могло быть полезным бесконечным Stream. – Thirler 3 August 2016 в 07:55
  • 3
    @Thirler Не так сложно построить собственный getFutureTransitions() с бесконечным Stream: Stream.iterate(rules.nextTransition(Instant.now()), t -> rules.nextTransition(t.getInstant())) – Flown 3 August 2016 в 09:19
  • 4
    Состояние ZoneRules имеет две части - переходы (известные исторические), доступные через getTransitions(), и правила перехода (неопределенное будущее), доступ к которым осуществляется через getTransitionRules(). Метод nextTransition(Instant) склеивает два элемента состояния вместе. – JodaStephen 3 August 2016 в 16:22
Другие вопросы по тегам:

Похожие вопросы: