使用连字符打印连续日期

时间:2020-07-25 22:32:23

标签: java android xml date time

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

例如

13Aug2020
15Aug2020 - 18Aug2020
22Aug2020

代替

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

用于打印日期的代码:

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

其中 mDateView 是Textview, mDateValue 是包含用逗号分隔的所有日期的字符串

1 个答案:

答案 0 :(得分:2)

使用LocalDate将每个字符串解析为DateTimeFormatter对象。搜索方式(如果您使用旧的麻烦的SimpleDateFormat进入页面,请避免这种情况)。为当前间隔的开始和结束创建两个变量。将第一个日期存储到两个 中。循环浏览剩余日期:

  • 如果当前日期是结束日期后的一天,则将其存储到末尾,从而将间隔延长一天。
  • 否则,将打印当前间隔,请参见下文。然后再次将当前日期存储在开始和结束位置。

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

如何打印当前间隔:如果开始和结束相等,则仅打印其中一个;否则,请同时打印两者之间的短划线。无论哪种格式,每个打印日期都将转换为所需的格式,例如使用相同的DateTimeFormatter的原始格式。

要确定当前日期是否是结束日期,请使用plusDays的{​​{1}}和isEqual方法。

快乐的编码。

问题:LocalDate是否不需要Android 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(用于JSR 310的ThreeTen;请参见底部的链接)。
  • 在较旧的Android上,请使用废除旧书或Android版本的ThreeTen Backport。称为ThreeTenABP。在后一种情况下,请确保使用子包从LocalDate导入日期和时间类。

链接