Java日历与Android日历有什么区别

Isl*_*sem 4 java android calendar android-calendar java-calendar

我是 Android 新手,我正在尝试获取当前日期,但 AndroidCalendar类需要 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);
}
Run Code Online (Sandbox Code Playgroud)

仅使用 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);
Run Code Online (Sandbox Code Playgroud)

Bas*_*que 8

tl;博士

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

两者都不。

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

LocalDate.of( 2018 , Month.JANUARY , 23 ) 
Run Code Online (Sandbox Code Playgroud)

避免遗留类

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

所述ThreeTen-反向移植库带来的绝java.time使用几乎相同的API功能到Java 6和7。该项目进一步适用于ThreeTenABP项目中的 Android <26 。

我强烈建议避免使用遗留类,而只使用java.time类。这些现代类在 JSR 310 中定义,并由领导行业领先的Joda-Time库的同一个人Stephen Colebourne领导。所以他们有基于多年经验的优秀设计。使用ThreeTenABP非常值得将库添加到您的项目中。

对于只有日期、年月日、没有时间和时区的日期,请使用LocalDate该类。

LocalDate ld = LocalDate.of( 2018 , 1 , 23 ) ; 
Run Code Online (Sandbox Code Playgroud)

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

LocalDate ld = LocalDate.of( 2018 , Month.JANUARY , 23 ) ; 
Run Code Online (Sandbox Code Playgroud)

Java 中所有日期时间类型的表,包括现代的和传统的


关于java.time

java.time框架是建立在Java 8和更高版本。这些类取代了麻烦的旧的遗留日期时间类,例如java.util.Date, Calendar, & SimpleDateFormat

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

现在处于维护模式Joda-Time项目建议迁移到java.time类。

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

从哪里获得 java.time 类?

哪个 java.time 库与哪个版本的 Java 或 Android 一起使用的表

  • @IslamAssem 更仔细地重读我的答案,在最后寻找项目符号中的“Android”。 (2认同)