Java 使用连字符打印连续日期

Java 使用连字符打印连续日期,java,android,xml,date,time,Java,Android,Xml,Date,Time,我有一个日期列表,以ddMMMyyyy的形式存储在一个字符串中。日期可能是连续的,也可能不是连续的 我将这些日期打印为单独的日期。如果日期是连续的,我想删除它并使用连字符 例如 13Aug2020 15Aug2020 - 18Aug2020 22Aug2020 而不是 13Aug2020 15Aug2020 16Aug2020 17Aug2020 18Aug2020 22Aug2020 用于打印日期的代码: mDateView.setText(mDateValue.replace("

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

例如

13Aug2020
15Aug2020 - 18Aug2020
22Aug2020
而不是

13Aug2020
15Aug2020
16Aug2020
17Aug2020
18Aug2020
22Aug2020
用于打印日期的代码:

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

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

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

  • 如果当前日期是结束后一天,则将其存储到结束中,从而将间隔延长一天
  • 否则,打印当前间隔,请参见下文了解如何打印。然后再次将当前日期存储到开始和结束中
循环终止后,打印当前间隔

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

要确定当前日期是否在结束后一天,请使用
plusDays
LocalDate
isEqual
方法

快乐编码

问:LocalDate不需要Android API级别26吗?
LocalDate
是现代java日期和时间API java.time的一部分。time在较旧和较新的Android设备上都能很好地工作。它至少需要Java6

  • 在Java8和更高版本以及更新的Android设备上(API级别26),现代API是内置的
  • 在非androidjava6和7中,获取三个后端口,即现代类的后端口(三个十用于jsr310;请参见底部的链接)
  • 在较旧的Android上,可以使用desugaring或Android版本的ThreeTen Backport。它叫ThreeTenABP。在后一种情况下,请确保使用子包从
    org.threeten.bp
    导入日期和时间类
链接
  • 解释如何使用java.time
  • ,其中首先描述了
    java.time
  • ,java.time的后端口到Java6和Java7(JSR-310为三十)
  • ,Android版Three Ten Backport
  • ,解释得非常透彻

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

  • 如果当前日期是结束后一天,则将其存储到结束中,从而将间隔延长一天
  • 否则,打印当前间隔,请参见下文了解如何打印。然后再次将当前日期存储到开始和结束中
循环终止后,打印当前间隔

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

要确定当前日期是否在结束后一天,请使用
plusDays
LocalDate
isEqual
方法

快乐编码

问:LocalDate不需要Android API级别26吗?
LocalDate
是现代java日期和时间API java.time的一部分。time在较旧和较新的Android设备上都能很好地工作。它至少需要Java6

  • 在Java8和更高版本以及更新的Android设备上(API级别26),现代API是内置的
  • 在非androidjava6和7中,获取三个后端口,即现代类的后端口(三个十用于jsr310;请参见底部的链接)
  • 在较旧的Android上,可以使用desugaring或Android版本的ThreeTen Backport。它叫ThreeTenABP。在后一种情况下,请确保使用子包从
    org.threeten.bp
    导入日期和时间类
链接
  • 解释如何使用java.time
  • ,其中首先描述了
    java.time
  • ,java.time的后端口到Java6和Java7(JSR-310为三十)
  • ,Android版Three Ten Backport
  • ,解释得非常透彻

XML究竟从何而来?请尝试将日期字符串转换为日期对象,然后使用循环查找序列的最后一个日期。参见:看起来像一个简单的编程任务,你到底在哪里挣扎?顺便说一句,时间间隔文本上是用斜杠字符分隔日期,而不是空格和连字符
2020-08-15/2020-08-18
XML究竟是从哪里来的?尝试将日期字符串转换为日期对象,然后使用循环查找序列的最后日期。参见:看起来像一个简单的编程任务,你到底在哪里挣扎?顺便说一句,时间间隔文本上是用斜杠字符分隔日期,而不是空格和连字符<代码>2020-08-15/2020-08-18