Как получить количество дней между двумя заданными датами в Scala

я пытался получить всю дату между двумя заданными датами, но не смог получить.

Я пробовал вот так.

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 25.12.2020 20:29

@mck как импорт org.joda.time.DateTime импорт org.joda.time.Days импорт org.joda.time.Months

Smith 25.12.2020 20:29

Спасибо, что поделились своим импортом, это полезно. Всегда лучше добавлять новую информацию в сам вопрос, а не в комментарий, чтобы у нас было все в одном месте.

Ole V.V. 26.12.2020 05:56

Когда вы можете использовать Joda-Time, я рекомендую вам пойти ва-банк на Joda-Time и избегать смешивания SimpleDateFormat и Date. SimpleDateFormat и Date плохо спроектированы, поэтому Joda-Time был разработан в первую очередь.

Ole V.V. 26.12.2020 06:23

К вашему сведению, Joda-Time сейчас подходит к концу в режиме обслуживания. Его создатель продолжал создавать классы java.time, которые теперь встроены в Java. Рассмотрите возможность миграции, когда это удобно.

Basil Bourque 27.12.2020 04:28
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
5
997
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Вы не можете смешивать время 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, как я могу преобразовать их в любой формат даты

Smith 25.12.2020 21:00

@Разработчик использует start.toDate

mck 25.12.2020 21:09

Ответ в порядке. Не согласен с последним комментарием. При использовании Joda-Time держитесь подальше от класса Date, он плохо спроектирован и давно устарел. Чтобы напечатать DateTime в определенном формате, используйте DateTimeFormatter, либо тот же самый, либо второй.

Ole V.V. 26.12.2020 05:59

Java.время

Для полноты картины вот версия того же кода в формате 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, вам подойдет два из них, как показано в другом ответе.

Ссылки

Другие вопросы по теме