java.time
String fromDateTime = OffsetDateTime.now(ZoneId.systemDefault()).minusMonths(6).toString();
System.out.println(fromDateTime);
Вывод при запуске на моем компьютере только сейчас:
2018-08-04T12: 45: 34.087966 + 01: 00
java.time - это современный Java-интерфейс даты и времени, который эффективно заменил Joda-Time.С домашней страницы:
Обратите внимание, что Joda-Time считается в значительной степени «законченным» проектом.Никаких серьезных улучшений не планируется.При использовании Java SE 8, пожалуйста, перейдите на java.time
(JSR-310).
В коде я использую тот факт, что методы toString
классов java.time производят ISO8601 формат, формат, который вы просили.Я считаю маловероятным, что дополнительные десятичные числа в секундах будут представлять какую-либо проблему, поскольку они разрешены в стандарте.
Joda-Time
String fromDateTime = new DateTime().minusMonths(6).toString();
Пример вывода:
2018-08-04T12: 50: 36.071 + 02: 00
new DateTime()
только с точностью до миллисекунды.Вы всегда будете получать ровно 3 десятичных знака в секундах.
Я должен использовать старые библиотеки Java, потому что я работаю в компании, которая использует версию Java <8 </h2> java.time прекрасно работает на Java 6и 7 тоже, и при прочих равных, я рекомендую это по Joda-Time.Joda-Time, без сомнения, является хорошим выбором, если принудительно использовать Java 5. В Java 8 и более поздних версиях и на более новых устройствах Android (начиная с уровня API 26) java.time поставляется встроенным. В Java 6 и 7 получите ThreeTen Backport, бэкпорт современных классов (ThreeTen для JSR 310; см. Ссылки внизу). На (более старых) Android используетсяAndroid-версия ThreeTen Backport.Это называется ThreeTenABP.И убедитесь, что вы импортируете классы даты и времени из org.threeten.bp
с подпакетами. Что пошло не так в вашем коде?
Ваш код может быть скомпилирован без признаков ошибок, новыдает java.lang.IllegalArgumentException: Cannot format given Object as a Date
при запуске.Это связано с тем, что SimpleDateFormat
не может отформатировать объект Joda-Time DateTime
.Конечно, мы ожидали, что об этом будет сообщено во время компиляции.Но в дополнение к SimpleDateFormat.format(Date)
есть также переопределенный format(Object)
, унаследованный от Format
.Он работает для форматирования Date
или Number
(за миллисекунды с начала эпохи).Этот метод тот, который компилятор выбирает, когда вы передаете DateTime
.Вот почему нет сообщения об ошибке во время компиляции.
Совет: Если вы не сразу понимаете сообщение об ошибке, вставьте его в свою поисковую систему.Это очень часто приведет вас к объяснению и решению.Также в этом случае.
Ссылки