Java日历与Android日历

时间:2018-10-23 15:07:22

标签: java android calendar android-calendar java-calendar

我是Android新手,我想获取当前日期,但是Android Calendar类需要API24。我需要支持较旧的设备,并且自API以来,Time类已被弃用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 :(得分:2)

tl; dr

  

那么我应该使用Android日历还是Java日历?

都不是。

使用现代的 java.time 类。可在Android <26以下版本的后端中使用。

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

避免使用旧类

在Java中,可怕的java.util.Calendar类(以及相关的类Date等)几年前被 java.time 类所取代。现在可在Android 26及更高版本中使用。

ThreeTen-Backport 库使用几乎相同的API为Java 6和7提供了必需的 java.time 功能。该项目在 ThreeTenABP 项目中进一步适用于Android <26。

我强烈建议您避免使用旧类,而应仅使用 java.time 类。这些现代类在JSR 310中定义,并由领导业界领先的 Joda-Time 库的同一个人Stephen Colebourne领导。因此,他们基于多年的经验拥有出色的设计。使用 ThreeTenABP 非常值得将库添加到项目中。

对于仅日期,年-月-日,无日期且无时区的情况,请使用LocalDate类。

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

或者使用方便的Month枚举以提高可读性。

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

关于 java.time

java.time框架已内置在Java 8及更高版本中。这些类取代了麻烦的旧legacy日期时间类,例如java.util.DateCalendarSimpleDateFormat

目前位于Joda-Timemaintenance mode项目建议迁移到java.time类。

要了解更多信息,请参见Oracle Tutorial。并在Stack Overflow中搜索许多示例和说明。规格为JSR 310

您可以直接与数据库交换 java.time 对象。使用符合JDBC driver或更高版本的JDBC 4.2。不需要字符串,不需要java.sql.*类。

在哪里获取java.time类?