使用连字符打印连续日期



我有一个ddMMMyyyy形式的日期列表,存储在一个字符串中。日期可能是连续的,也可能不是连续的我将这些日期打印为单独的日期。如果日期是连续的,我想删除它并使用连字符。

例如

13Aug2020
15Aug2020 - 18Aug2020
22Aug2020

而不是

13Aug2020
15Aug2020
16Aug2020
17Aug2020
18Aug2020
22Aug2020

用于打印日期的代码:

mDateView.setText(mDateValue.replace(",", "n"));

其中mDateView是一个文本视图,mDateValue则是包含逗号分隔的所有日期的字符串

使用DateTimeFormatter将每个字符串解析为LocalDate对象。搜索如何使用(如果您的搜索结果是使用旧的、麻烦的SimpleDateFormat的页面,请避免使用(。为当前间隔的开始和结束创建两个变量。将第一个日期存储到both中。在剩余日期的循环中:

  • 如果当前日期在结束后一天,则将其存储到结束中,从而将间隔延长一天
  • 否则打印当前间隔,请参阅下面的操作方法。然后再次将当前日期存储到开始日期和结束日期中

循环终止后,打印当前间隔。

如何打印当前间隔:如果开始和结束相等,则只打印其中一个;否则,请在两者之间用短划线打印。在任何一种情况下,都将每个打印日期格式化为所需格式,例如使用相同DateTimeFormatter的原始格式。

要确定当前日期是否为结束后一天,请使用LocalDateplusDaysisEqual方法。

问: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,有一个非常彻底的解释

最新更新