我的日期格式为:YYYY-MM-DD
而且我想以ISO格式获取日期,分别是America / Chicago时区中的一天的开始时间(从12:00 AM开始)和一天的结束时间(在11:59 PM结束)。
例如对于日期:2020-06-08(6月8日),转换后的最终输出如下:
一天的开始时间为日期:2020-06-08T05:00:00.000Z
当天的结束时间为日期:2020-06-09T04:59:59.999Z
如果有人有相同的提示,请在这里帮助我。
ZoneId zone = ZoneId.of("America/Chicago");
String dateString = "2020-06-08";
LocalDate date = LocalDate.parse(dateString);
Instant startOfDay = date.atStartOfDay(zone).toInstant();
Instant endOfDay = date.plusDays(1).atStartOfDay(zone).toInstant();
System.out.println("The day is from " + startOfDay + " (inclusive) to " + endOfDay + " (exclusive)");
输出为:
日期是从2020-06-08T05:00:00Z(含)到 2020-06-09T05:00:00Z(独家)
为了不排除一天的最后一毫秒,我们需要将这一天算作第二天的第一天。如果您确实坚持要减去毫秒或十亿分之一秒,那么这当然取决于您。问题: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)。- [ThreeTenABP,ThreeTen Backport的Android版本
- Question: How to use ThreeTenABP in Android Project,有非常详尽的解释。
- Wikipedia article: ISO 8601