Ответ 1
java.time
Проект Joda-Time сейчас находится в режиме обслуживания. Команда советует перейти на классы java.time.
Мин/макс в java.time смотрите в моем ответе на похожий вопрос.
Joda времени
Joda-Time отслеживает время в миллисекундах с момента первого момента 1970 года в UTC. Этот счетчик поддерживается с помощью 64-битного long
целого числа. Таким образом, технически максимум и минимум - это + / - пределы long
.
… new DateTime( Long.MIN_VALUE )
… new DateTime( Long.MAX_VALUE )
Joda-Time не имеет таких минимальных/максимальных значений, которые можно было бы использовать в качестве констант. Напротив, обратите внимание, что преемник Joda-Times, java.time, встроенный в Java 8 и более поздние версии, действительно предлагает константы LocalDateTime.MIN
и LocalDateTime.MAX
.
Кстати, команда Joda-Time посоветовала нам перейти на java.time. Большая часть функциональности java.time перенесена на Java 6 и 7 в ThreeTen-Backport, а затем адаптирована для Android в ThreeTen-ABP.
Слишком большой, слишком маленький
Остерегайтесь этих крайностей. Их использование не практично. Различные библиотеки, приложения, базы данных и другие приемники/источники значений даты и времени могут иметь очень разные ограничения, некоторые намного больше, но обычно намного меньше.
Например, многие системы используют старую традицию UNIX & POSIX по отслеживанию времени в качестве 32-разрядного целого числа целых секунд с 1970-01-01T00: 00: 00Z. Естественный предел в + / - два миллиарда секунд приводит к надвигающейся проблеме 2038 года.
Другим ограничением является физический размер отображения полей в формах и отчетах, которые ожидают только четыре цифры в номере года.
Временное решение
Вы можете определить свой собственный минимум/максимум.
Вам могут потребоваться экстремальные значения, такие как год 0000 и год 9999. Joda-Time поддерживает годы позже, чем 9,999, но я бы придерживался 4 цифр, чтобы соответствовать широко используемым форматам для отображения на экране и в отчетах. Визуально четыре девятки выделяются как фиктивная дата.
Или вам может потребоваться ожидаемое минимальное значение, соответствующее вашей бизнес-логике. Если вы создаете новую систему выставления счетов, то вы знаете, что год всегда должен быть в этом году или позже.
Я предлагаю определить константы на вспомогательном классе. Что-то вроде этого:
package com.example;
import org.joda.time.DateTime;
import org.joda.time.DateTimeZone;
public class JodaTimeHelper {
static final public DateTime START_OF_TIME = new DateTime( 0000, 1, 1, 0, 0, 0, DateTimeZone.UTC );
static final public DateTime END_OF_TIME = new DateTime( 9999, 1, 1, 0, 0, 0, DateTimeZone.UTC );
static final public DateTime MINIMUM_INVOICE_DATETIME = new DateTime( 2015, 1, 1, 0, 0, 0, DateTimeZone.UTC );
}
Вот синтаксис для вызова этих констант.
System.out.println( "START_OF_TIME: " + JodaTimeHelper.START_OF_TIME );
System.out.println( "END_OF_TIME: " + JodaTimeHelper.END_OF_TIME );
System.out.println( "MINIMUM_INVOICE_DATETIME: " + JodaTimeHelper. MINIMUM_INVOICE_DATETIME );
Когда беги.
START_OF_TIME: 0000-01-01T00:00:00.000Z
END_OF_TIME: 9999-01-01T00:00:00.000Z
MINIMUM_INVOICE_DATETIME: 2015-01-01T00:00:00.000Z