我是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);
答案 0 :(得分:2)
那么我应该使用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 8及更高版本中。这些类取代了麻烦的旧legacy日期时间类,例如java.util.Date
,Calendar
和SimpleDateFormat
。
目前位于Joda-Time的maintenance mode项目建议迁移到java.time类。
要了解更多信息,请参见Oracle Tutorial。并在Stack Overflow中搜索许多示例和说明。规格为JSR 310。
您可以直接与数据库交换 java.time 对象。使用符合JDBC driver或更高版本的JDBC 4.2。不需要字符串,不需要java.sql.*
类。
在哪里获取java.time类?