如何解决如何使用Kotlin根据区域获取设备android的当前时间?
如何获取安装了APK的设备的当前时间? 这是我的代码,根据Kotlin所在的地区,我应该如何更改以获取当前时间
const handleTestChange = useCallback((e,testKey) => {
e.persist();
const updateArray = { ...moduleState };
updateArray.test_cases[testKey][e.target.name] = e.target.value;
setModule({ ...updateArray });
},[moduleState]);
为什么我会得到当地时间+ 3h?
解决方法
您无需更改任何内容,代码即可为您提供设备的当前时间
但是,由于每个设备可能都不准确,因此建议您在有时间的情况下从服务器接收它。
,您的代码隐式使用JVM的默认时区。这似乎没有给您想要的结果。解决方案是显式指定时区(无论如何通常是个好主意)。
java.time
我正在使用现代Java日期和时间API java.time。
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("uuuu-MM-dd HH:mm:ss");
ZoneId usersDesiredTimeZone = ZoneId.of("Africa/Tripoli");
ZonedDateTime now = ZonedDateTime.now(usersDesiredTimeZone);
String text = now.format(formatter);
System.out.println(text);
我刚才运行此代码段时,输出为:
2020-09-02 16:51:21
打印时间比UTC提前2个小时,因为这是利比亚正在使用的时间。请替换您自己所需的时区。
代码的另一个变化是,我在格式模式字符串中的00到23的一天中使用大写HH
。小写的hh
是从01到12的AM或PM的一个小时。我认为这可能不是您想要的。
问题:java.time是否不需要Android API级别26?
java.time在较新和较旧的Android设备上均可正常运行。它只需要至少 Java 6 。
- 在Java 8和更高版本以及更新的Android设备(API级别26以上)中,内置了现代API。
- 在非Android Java 6和7中,获得ThreeTen Backport,这是现代类的backport(JSR 310的ThreeTen;请参见底部的链接)。
- 在较旧的Android上,请使用废除旧书或Android版本的ThreeTen Backport。称为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)的反向端口。 - Java 8+ APIs available through desugaring
- ThreeTenABP,Android版本的ThreeTen Backport
- Question: How to use ThreeTenABP in Android Project,其中有非常详尽的解释。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。