我有一个ddMMMyyyy形式的日期列表,存储在一个字符串中。日期可能是连续的,也可能不是连续的我将这些日期打印为单独的日期。如果日期是连续的,我想删除它并使用连字符。
例如
13Aug2020
15Aug2020 - 18Aug2020
22Aug2020
而不是
13Aug2020
15Aug2020
16Aug2020
17Aug2020
18Aug2020
22Aug2020
用于打印日期的代码:
mDateView.setText(mDateValue.replace(",", "n"));
其中mDateView是一个文本视图,mDateValue则是包含逗号分隔的所有日期的字符串
使用DateTimeFormatter
将每个字符串解析为LocalDate
对象。搜索如何使用(如果您的搜索结果是使用旧的、麻烦的SimpleDateFormat
的页面,请避免使用(。为当前间隔的开始和结束创建两个变量。将第一个日期存储到both中。在剩余日期的循环中:
- 如果当前日期在结束后一天,则将其存储到结束中,从而将间隔延长一天
- 否则打印当前间隔,请参阅下面的操作方法。然后再次将当前日期存储到开始日期和结束日期中
循环终止后,打印当前间隔。
如何打印当前间隔:如果开始和结束相等,则只打印其中一个;否则,请在两者之间用短划线打印。在任何一种情况下,都将每个打印日期格式化为所需格式,例如使用相同DateTimeFormatter
的原始格式。
要确定当前日期是否为结束后一天,请使用LocalDate
的plusDays
和isEqual
方法。
问:LocalDate
不需要安卓API 26级吗
LocalDate
是现代java日期和时间API java.time的一部分。java.time在较旧和较新的Android设备上都能很好地工作。它只需要至少Java 6。
- 在Java 8及更高版本中,以及在较新的Android设备上(从API 26级开始(,现代API内置
- 在非Android Java 6和7中,获得ThreeTen Backport,即现代类的Backport(JSR310的ThreeTen;请参阅底部的链接(
- 在旧的安卓系统上,可以使用desugaring或安卓版的ThreeTen Backport。它被称为ThreeTenABP。在后一种情况下,请确保使用子包从
org.threeten.bp
导入日期和时间类
链接
- Oracle教程:日期时间,解释如何使用java.Time
DateTimeFormatter
文件- Java规范请求(JSR(310,其中首次描述了
java.time
- ThreeTen Backport项目,
java.time
到Java 6和7的Backport(JSR-310的ThreeTen( - 通过降级提供Java 8+API
- ThreeTenABP,安卓版ThreeTen背包
- 问题:如何在Android项目中使用ThreeTenABP,有一个非常彻底的解释