为什么 Android 中的日历
在不同的 Android 设备上给出不同的日期?
我确实获得了默认区域设置,但仍然遇到同样的问题。
代码:
calendar = Calendar.getInstance();
currentDate = DateFormat.getDateInstance(DateFormat.DATE_FIELD,Locale.getDefault())
.format(calendar.getTime());
最佳答案
Why does Calendar in android gives different dates in different android devices?
Calendar.getInstance
使用系统时钟,因此如果不同设备的时钟设置不同,您将得到不同的时间。- 您的日期格式使用 JVM 的默认时区(与区域设置无关)。由于所有时区的日期都不相同,因此您应该获得不同的日期(即使系统时钟已正确设置为当前时间)。
也就是说,Calendar
和 DateFormat
类存在相当严重的设计问题,我认为它们早已过时了。如果您在应用程序中对日期或时间进行大量工作,则可能应该使用 java.time。它是现代的 Java 日期和时间 API,设计得更好,使用起来也更好。
问题:我可以在 Android 上使用 java.time 吗?
是的,java.time 在旧版和新版 Android 设备上都能很好地工作。它只需要至少 Java 6。
- 在 Java 8 及更高版本以及较新的 Android 设备(从 API 级别 26 开始)中,现代 API 是内置的。
- 在 Java 6 和 7 中获取 ThreeTen Backport,即新类的向后移植(ThreeTen for JSR 310;请参阅底部的链接)。
- 在(较旧的)Android 上使用 ThreeTen Backport 的 Android 版本。它被称为 ThreeTenABP。并确保使用子包从
org. Threeten.bp
导入日期和时间类。
链接
- Oracle tutorial: Date Time解释如何使用
java.time
。 - Java Specification Request (JSR) 310 ,其中首次描述了 java.time。
- ThreeTen Backport project ,
java.time
向 Java 6 和 7 的向后移植(对于 JSR-310,为 ThreeTen)。 - ThreeTenABP , Android 版 ThreeTen Backport
- Question: How to use ThreeTenABP in Android Project ,有非常详尽的解释。
关于java - 日历日期不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53614307/