tl; др
Joda-Time предлагает методы Duration::plus
& Duration::minus
.
myDuration.minus( // A span of time unattached to the timeline. Consists of a number of milliseconds.
Duration.standardDays( 2 ) // Generic 24-hour days.
)
Лучше перейти на java.time :
myDuration.minus( // A span of time unattached to the timeline. Consists of a number of whole seconds plus a number of nanoseconds.
Duration.ofDays( 2 ) // Generic 24-hour days.
)
Нет такой вещи, как days
Duration (startTime, endTime) .minusDays (2)
A Duration
в Joda-Time представляет количество миллисекунд.Этот промежуток времени не привязан к временной шкале.Таким образом, нет понятия «дни».
Цитировать документацию :
Неизменная длительность, определяющая продолжительность в миллисекундах.
Продолжительность определяется фиксированнойколичество миллисекунд.Не существует понятия полей, таких как дни или секунды, поскольку эти поля могут различаться по длине.
Поэтому, хотя вы не можете добавлять / вычитать дней , вы можете добавлять / вычитатьколичество миллисекунд - это 24-часовой период общего дня, без учета проблем календаря и без учета аномалий, таких как переход на летнее время (DST).
Используйте java.util.concurrent.TimeUnit
перечисление для вычисления этого количества миллисекунд.
long millis = TimeUnit.DAYS.toMilliseconds( 2 ) ; // 2 days of 24 hours * 60 minutes per hour * 60 seconds per minute * 1,000 milliseconds per second.
Duration twoGenericDays = Duration.millis( millis ) ;
Класс Duration
предлагает ярлык для этой работы, статический метод Duration.standardDays
, где «стандарт» означает общие 24-часовые фрагменты временине имеет отношения к календарю.
Duration twoGenericDays = Duration.standardDays( 2 ) ; // Two generic 24-hour days, unrelated to the calendar.
Доп.
Duration d = myDuration.plus( twoGenericDays ) ;
Вычитание.
Duration d = myDuration.minus( twoGenericDays ) ;
java.time
Joda-Time проект в настоящее время находится в режиме обслуживания и рекомендует перейти к его преемнику, классам java.time .
Те же концепции, что и выше, где java.time.Duration
представляет промежуток времени, не привязанный к временной шкале.За исключением того, что разрешение меньше: наносекунд , а не миллисекунд .Технически, Duration
состоит из (a) количества целых секунд и (b) количества наносекунд, составляющих доли секунды.
Duration twoGenericDays = Duration.ofDays( 2 ) ; // Two generic days, each being a 24 hours long.
Add.
Duration d = myDuration.plus( twoGenericDays ) ;
Вычтите.
Duration d = myDuration.minus( twoGenericDays ) ;
Как и Joda-Time, классы java.time построены по шаблону неизменных объектов .Вместо того, чтобы изменять («изменять») объект, создается новый отдельный объект.
О java.time
фреймворк java.time встроен в Java 8 и более поздние версии.Эти классы вытесняют проблемные старые устаревшие классы даты и времени, такие как java.util.Date
, Calendar
, & SimpleDateFormat
.
Проект Joda-Time , теперь в режиме обслуживания , рекомендует перейти на классы java.time .
Чтобы узнать больше, см. Oracle Tutorial .И поиск переполнения стека для многих примеров и объяснений.Спецификация: JSR 310 .
Вы можете обмениваться java.time объектами напрямую с вашей базой данных.Используйте драйвер JDBC , совместимый с JDBC 4.2 или более поздней версии.Нет необходимости в строках, нет необходимости в java.sql.*
классах.
Где получить классы java.time?
ThreeTen-Extra Проект расширяет java.time дополнительными классами.Этот проект является полигоном для возможных будущих дополнений к java.time.Здесь вы можете найти несколько полезных классов, таких как Interval
, YearWeek
, YearQuarter
и more .