日历日期不同



为什么Android中的Calendar在不同的Android设备上给出不同的日期?我确实得到了默认的区域设置,但我仍然有同样的问题。

代码:

calendar = Calendar.getInstance();
currentDate = DateFormat.getDateInstance(DateFormat.DATE_FIELD,Locale.getDefault())
.format(calendar.getTime());

为什么android中的日历在不同的android设备中给出不同的日期?

  1. Calendar.getInstance使用系统时钟,因此如果不同设备的时钟设置不同,您将获得不同的时间
  2. 您的日期格式使用JVM的默认时区(与区域设置无关(。由于所有时区的日期都不相同,因此您应该获得不同的日期(即使系统时钟正确设置为当前时间(

也就是说,CalendarDateFormat类有相当严重的设计问题,我认为它们已经过时很久了。如果您在应用程序中对日期或时间进行了大量的处理,那么您可能应该使用java.time。它是现代的Java日期和时间API,设计得更好,使用起来也更好。

问题:我可以在Android上使用java.time吗

是的,java.time在较旧和较新的Android设备上都能很好地工作。它只需要至少Java 6

  • 在Java 8及更高版本中,以及在较新的Android设备上(从API 26级开始(,现代API内置
  • 在Java6和7中,获得ThreeTen Backport,即新类的Backport(JSR310的ThreeTen;请参阅底部的链接(
  • 在(旧的(安卓系统上使用安卓版的ThreeTen Backport。它被称为ThreeTenABP。并确保您使用子包从org.threeten.bp导入日期和时间类

链接

  • Oracle教程:日期-时间,解释如何使用java.time
  • Java规范请求(JSR(310,其中首次描述了java.time
  • ThreeTen Backport项目,java.time到Java 6和7的Backport(JSR-310的ThreeTen(
  • ThreeTenABP,安卓版ThreeTen背包
  • 问题:如何在Android项目中使用ThreeTenABP,有一个非常彻底的解释

最新更新