я пытался получить всю дату между двумя заданными датами, но не смог получить.
Я пробовал вот так.
val dateformat = new SimpleDateFormat("yyyy-MM-dd")
var start = dateformat.parse("2020-10-01")
var end = dateformat.parse("2020-10-12")
val days = Days.daysBetween(start, end)
val months = Months.monthsBetween(start, end)
Но я получаю дни между не найденными?
Обновлено: мой импорт:
import org.joda.time.DateTime;
import org.joda.time.Days;
import org.joda.time.Months;
@mck как импорт org.joda.time.DateTime импорт org.joda.time.Days импорт org.joda.time.Months
Спасибо, что поделились своим импортом, это полезно. Всегда лучше добавлять новую информацию в сам вопрос, а не в комментарий, чтобы у нас было все в одном месте.
Когда вы можете использовать Joda-Time, я рекомендую вам пойти ва-банк на Joda-Time и избегать смешивания SimpleDateFormat
и Date
. SimpleDateFormat
и Date
плохо спроектированы, поэтому Joda-Time был разработан в первую очередь.
К вашему сведению, Joda-Time сейчас подходит к концу в режиме обслуживания. Его создатель продолжал создавать классы java.time, которые теперь встроены в Java. Рассмотрите возможность миграции, когда это удобно.
Вы не можете смешивать время java и время joda. Создайте дату и время, используя joda.
import org.joda.time.format.DateTimeFormat
import org.joda.time.{Days,Months}
val formatter = DateTimeFormat.forPattern("yyyy-MM-dd")
var start = formatter.parseDateTime("2020-10-01")
var end = formatter.parseDateTime("2020-10-12")
val days = Days.daysBetween(start, end)
val months = Months.monthsBetween(start, end)
что, когда я пытаюсь напечатать даты, они печатаются как 2020-10-12T00:00:00.000+05:30, как я могу преобразовать их в любой формат даты
@Разработчик использует start.toDate
Ответ в порядке. Не согласен с последним комментарием. При использовании Joda-Time держитесь подальше от класса Date
, он плохо спроектирован и давно устарел. Чтобы напечатать DateTime
в определенном формате, используйте DateTimeFormatter
, либо тот же самый, либо второй.
Для полноты картины вот версия того же кода в формате java.time. java.time — это современный API даты и времени Java, преемник Joda-Time. Однако вам придется самостоятельно переводить мой код Java.
import java.time.temporal.ChronoUnit;
import java.time.LocalDate;
LocalDate start = LocalDate.parse("2020-10-01");
LocalDate end = LocalDate.parse("2020-10-12");
long days = ChronoUnit.DAYS.between(start, end);
long months = ChronoUnit.MONTHS.between(start, end);
System.out.format("Between %s and %s are %d days or %d months%n",
start, end, days, months);
Выход:
Между 01.10.2020 и 12.10.2020 11 дней или 0 месяцев.
На домашней странице Joda-Time говорится:
Обратите внимание, что Joda-Time считается в значительной степени «законченным» проектом. Серьезных доработок не планируется. Если вы используете Java SE 8, выполните миграцию до
java.time
(JSR-310).
Но я получаю дни между не найденными?
Дело не в том, что Scala не может найти Days.daysBetween()
. Ваши start
и end
имеют тип Date
, и сообщение означает, что Scala не может найти метод daysBetween
, который принимает два аргумента Date
. Вместо этого вам нужно будет передать два объекта типа ReadableInstant
(или ReadablePartial
, но это уже другая история). Поскольку собственный класс Joda DateTime
реализует интерфейс ReadableInstant
, вам подойдет два из них, как показано в другом ответе.
как вы импортировали дни и месяцы?