【问题标题】:What is difference between Java calendar vs Android calendarJava日历与Android日历有什么区别
【发布时间】:2019-03-27 21:16:18
【问题描述】:

我是 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);

【问题讨论】:

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


    【解决方案1】:

    tl;博士

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

    两者都没有。

    使用现代的 java.time 类。通过 Gradle Plugin 4 可在所有 Android 版本中使用。

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

    避免遗留类

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

    ThreeTen-Backport 库使用几乎相同的 API 将 java.time 功能引入 Java 6 和 7。该项目在 ThreeTenABP 项目中进一步适用于 Android

    我强烈建议避免使用遗留类,而只使用 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

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

    Joda-Time 项目现在位于maintenance mode,建议迁移到java.time 类。

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

    从哪里获取 java.time 类?

    【讨论】:

    • 这需要 API 26 和我的问题如何支持旧版本
    • @IslamAssem 重新阅读我的答案,更仔细地在最后的项目符号中寻找“Android”。
    • 能否详细解释一下为什么旧的日期时间类很麻烦?
    • @vhamon What's wrong with Java Date & Time API?。那里的那些答案只涵盖了一些的问题,还有更多。其中一个问题是缺少类型,无法表示重要的日期时间概念。我将在此处添加一个图表以显示缺少的内容。
    猜你喜欢
    • 1970-01-01
    • 2010-11-27
    • 1970-01-01
    • 2015-10-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-17
    相关资源
    最近更新 更多