ChronoUnit.MONTHS.between не следует подходу Half-Open

В последнем стандарте есть ключевое слово (export), которое поможет устранить эту проблему, но оно не реализовано ни в компилере, о котором я знаю, кроме Comeau.

Об этом можно узнать в FAQ-lite .

0
задан Michael 18 January 2019 в 17:15
поделиться

2 ответа

Как сказано в документе о ChronoUnit.between

Вычисление возвращает целое число, представляющее количество полных единиц между двумя темпоралами.

И

// these two lines are equivalent
between = thisUnit.between(start, end);
between = start.until(end, thisUnit);

Таким образом, между

"2018-11-30"
December -> 1
January  -> 2
February -> 3
March    -> 4
May      -> 5
"2019-05-01"
есть 5 полных месяцев
0
ответ дан azro 18 January 2019 в 17:15
поделиться

Я думаю, в документации все сказано здесь:

Вычисление возвращает целое число, представляющее количество полных единиц между двумя темпоралами. , Например, количество часов в промежутке между 11:30 и 13:29 будет составлять всего один час, поскольку одной минуте не хватает двух часов.

Число целых месяцев между 30 ноября и 1 мая: 5:

  1. декабрь
  2. январь
  3. февраль [113 ]
  4. март
  5. апрель

Почему вы думаете, что должно быть 6? Полуоткрытый просто говорит, что первый день включительно, а последний день - эксклюзивно. За исключением 1 мая ничего не происходит, весь апрель все еще в диапазоне. В том числе 30 ноября - это еще не целый месяц, поэтому все равно 5.

0
ответ дан Michael 18 January 2019 в 17:15
поделиться
Другие вопросы по тегам:

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