Как получить указанную c дату месяца программно? - PullRequest
0 голосов
/ 08 февраля 2020

Как получить указанную c дату месяца в android программно? Например, я хочу получить 23 апреля 2020 года в виде строки или целого числа и поместить его в оператор if.

Пример

if("23 april 2020"){
// some code
} else if ("24 april 2020"){
// some code
}

Ответы [ 3 ]

2 голосов
/ 08 февраля 2020

Вам следует преобразовать строковую дату в формат Дата , а затем сравнить их.

Вот пример

SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd",Locale.getDefault());
Calendar calendar1 = Calendar.getInstance();
Calendar calendar2 = Calendar.getInstance();

Date date1 = dateFormat.parse("2013-01-01");
Date date2 = dateFormat.parse("2013-01-02");

calendar1.setTime(date1);
calendar2.setTime(date2);

System.out.println("Compare Result : " + calendar2.compareTo(calendar1));
System.out.println("Compare Result : " + calendar1.compareTo(calendar2));
1 голос
/ 08 февраля 2020

java .time и ThreeTenABP

    LocalDate apr23 = LocalDate.of(2020, Month.APRIL, 23);
    LocalDate apr24 = LocalDate.of(2020, Month.APRIL, 24);

    LocalDate today = LocalDate.now(ZoneId.of("Australia/Tasmania"));
    if (today.equals(apr23)) {
        System.out.println("It’s April 23");
    } else if (today.equals(apr24)) {
        System.out.println("It’s April 24");
    } else {
        System.out.println("It’s none of those dates");
    }

Когда я запускал этот фрагмент сегодня (8 февраля в Тасмании), вывод был:

Это не те даты

Пожалуйста, укажите желаемый часовой пояс, в который я поместил Австралию / Тасманию. Чтобы использовать часовой пояс устройства, используйте ZoneId.systemDefault(), только помните, что значение по умолчанию может быть изменено какой-либо другой частью вашей программы или любой другой программой, работающей в той же JVM, и в этом случае вы не получите настройки устройства.

Объект класса LocalDate из java .time представляет дату. Так что это не строка и не int, но это то, что вам нужно. java .time - это современный Java API даты и времени, настоятельно рекомендуется. В дополнение к equals() a LocalDate также есть методы isAfter и isBefore. Если случается, что ваш пользователь не запускает ваше приложение именно на APril 23, вы можете использовать один из них, чтобы определить, что дата прошла (как только пользователь запустит приложение).

Вопрос: 't java .time требует Android API уровня 26?

java .time прекрасно работает как на старых, так и на новых Android устройствах. Для этого требуется как минимум Java 6 .

  • В Java 8 и более поздних версиях, а также на более новых Android устройствах (начиная с уровня API 26) современный встроенный API -in.
  • В не- Android Java 6 и 7 получите ThreeTen Backport, бэкпорт современных классов (ThreeTen для JSR 310; см. ссылки внизу).
  • Вкл. (Старше) Android Используйте редакцию ThreeTen Backport Android. Это называется ThreeTenABP. И убедитесь, что вы импортируете классы даты и времени из org.threeten.bp с подпакетами. Итак:

    import org.threeten.bp.LocalDate;
    import org.threeten.bp.Month;
    import org.threeten.bp.ZoneId;
    

    Поскольку вы используете Gradle, эта строка в вашем build.gradle должна сделать это (взято из репозитория Maven):

       compile group: 'com.jakewharton.threetenabp', name: 'threetenabp', version: '1.2.2'
    

    Если я правильно помню, этот синтаксис работает тоже (сохраните любые опечатки):

       compile 'com.jakewharton.threetenabp:threetenabp:1.2.2'
    

Ссылки

0 голосов
/ 08 февраля 2020

Вы можете получить текущую дату, позвонив по номеру System.currentTimeMillis() и используя SimpleDateFormat, чтобы проанализировать ее для String и выполнить сравнение.

Вот пример:

final SimpleDateFormat sdf  = new SimpleDateFormat("dd MMMM yyyy", Locale.getDefault());
final String now = sdf.format(System.currentTimeMillis());

Вы также можете разобрать дату как String, как упомянуто @Hamid Reza. Отдых зависит от вашего варианта использования.

Просто убедитесь, что вы выбрали правильный шаблон сопоставления для даты разбора, в вашем случае дд ММММ гггг

...