对于API >= 24请使用android.icu.util.Calendar,对于API <24请使用java.util.Calendar。

3
在API 24中,android.icu.util包中引入了一个新的Calendar类,它具有更多的日历和更好的本地化。我想知道是否有一种方法可以在Android API >= 24上使用这个Calendar,并在Android API < 24上使用旧的已弃用的java.util包中的Calendar。
设置minSdkVersion = 24几乎没有理由。此外,根据API级别,我不能将android.icu.util.Calendar分配给java.util.Calendar字段。有人解决了这个问题吗?还是只能使用旧的日历并等待市场淘汰旧设备?

1
为什么不迈出一步,将ThreeTenABP添加到你的Android项目中,这样你就可以使用Java.time,现代化的Java日期和时间API了呢?它使用起来更加方便。虽然我对android.icu.util.Calendar不太了解,但至少java.util.Calendar已经过时且设计不佳,而icu版本也没有给我更好的印象。 - undefined
有什么意义呢?如果您的应用在API级别24及以上运行时利用了一些ICU功能,从而向用户展示在API级别23及以下运行时不可用的功能,那么这样做有何意义呢? - undefined
1
或者使用我的库 Time4A,它提供了良好的国际化支持(类似于ICU4J),还具有更多更高质量的日历,并且与旧的API级别兼容性更好。 - undefined
@MenoHochschild 我没有找到任何关于许可证的提及,这很奇怪。 - undefined
@OleV.V. 或许这是一个很好的观点。但是为什么安卓开发者们要实现icu.Calendar呢? 我不想迁移到ThreeTen的原因有以下几点:
  1. 不想让apk变得臃肿
  2. 想要使用安卓的时区,而不是最新的IANA时区。我有另一个使用Jodatime的应用程序,因此遇到了很多麻烦。
- undefined
关于Time4A-licence(Time4J的衍生版本),请参阅此问题。哦,看来我忘记正式添加一个额外的许可文件到项目中了,对于造成的困惑我表示抱歉。至于tz-data,IANA-tzdb已经嵌入并作为默认选项,但也可以使用平台的tz-data(尽管我实际上认为这可以通过初始化参数以更舒适的方式完成)。 - undefined
1个回答

0

如果要在 Android 24 之前使用 icu.util.Calendar,您需要将 IBM 的库添加到 gradle 中:

implementation group: 'com.ibm.icu', name: 'icu4j', version: '69.1'

因此,您应该使用com.ibm.icu.util.Calendar而不是android.icu.util.Calendar。

这个答案对我很有帮助。

IBM日历Maven:https://mvnrepository.com/artifact/com.ibm.icu/icu4j


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接