Java календарь против Android календарь - PullRequest
0 голосов
/ 23 октября 2018

Я новичок в Android и пытаюсь получить текущую дату, но класс Android Calendar требует API 24. Мне нужно поддерживать старое устройство и TimeКласс устарел начиная с API 22.

Проблема в том, как получить текущую дату в API 23, и я решил ее с помощью java.util.Calendar, который работает во всех версиях.Итак, что я должен использовать, календарь Android или календарь Java?

Обратите внимание, что при использовании календаря Android день, месяц и год являются целыми числами.

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
        day =android.icu.util.Calendar.getInstance().get(android.icu.util.Calendar.DAY_OF_MONTH);
        month = android.icu.util.Calendar.getInstance().get(android.icu.util.Calendar.MONTH);
        year = android.icu.util.Calendar.getInstance().get(android.icu.util.Calendar.YEAR);
    }
    else {
        day = java.util.Calendar.getInstance().get(java.util.Calendar.DAY_OF_MONTH);
        month = java.util.Calendar.getInstance().get(java.util.Calendar.MONTH);
        year = java.util.Calendar.getInstance().get(java.util.Calendar.YEAR);
    }

А при использовании только календаря Java естьнет необходимости проверять версию API

        day = java.util.Calendar.getInstance().get(java.util.Calendar.DAY_OF_MONTH);
        month = java.util.Calendar.getInstance().get(java.util.Calendar.MONTH);
        year = java.util.Calendar.getInstance().get(java.util.Calendar.YEAR);

1 Ответ

0 голосов
/ 23 октября 2018

tl; dr

Так что мне использовать, календарь Android или Java-календарь?

Ни того, ни другого.

Используйте современные java.time классы.Доступно в бэк-порт для Android <26.</p>

LocalDate.of( 2018 , Month.JANUARY , 23 ) 

Избегайте устаревших классов

В Java ужасный класс java.util.Calendar (и связанные с ним классы, Date и т. Д.) Был вытеснен java.time несколько лет назад. классы.Теперь доступно в Android 26 и более поздних версиях.

Библиотека ThreeTen-Backport привносит обязательность функциональности java.time в Java 6 & 7 с использованием практически идентичного API.Этот проект дополнительно адаптирован для Android <26 в проекте <em>ThreeTenABP .

Я настоятельно рекомендую избегать устаревших классов, вместо этого используйте только классы java.time .Эти современные классы определены в JSR 310 и возглавляются тем же человеком, который возглавлял ведущую в отрасли библиотеку Joda-Time , Стивен Коулборн.Таким образом, они имеют отличный дизайн, основанный на многолетнем опыте.Использование ThreeTenABP стоит того, чтобы добавить библиотеку в ваш проект.

Только для даты, года-месяца-дня, без времени суток и без временизона, используйте класс LocalDate.

LocalDate ld = LocalDate.of( 2018 , 1 , 23 ) ; 

Или используйте удобное перечисление Month для большей читабельности.

LocalDate ld = LocalDate.of( 2018 , Month.JANUARY , 23 ) ; 

О 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?

  • Java SE 8 , Java SE 9 , Java SE 10, Java SE 11 и более поздние версии - часть стандартного Java API с связанной реализацией.
    • Java 9 добавляет некоторые незначительные функции и исправления.
  • Java SE 6 и JavaSE 7
    • Большая часть функций java.time перенесена в Java 6 & 7 в ThreeTen-Backport .
  • Android
    • Более поздние версии пакетов Android для реализации java.time классы.
    • Для более ранних версий Android (<26) проект <a href="https://github.com/JakeWharton/ThreeTenABP" rel="nofollow noreferrer"> ThreeTenABP адаптируется ThreeTen-Backport (упомянуто выше).См. Как использовать ThreeTenABP… .
...