【问题标题】:Print consecutive dates using hyphen使用连字符打印连续日期
【发布时间】:2020-11-15 12:55:30
【问题描述】:

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

举例

13Aug2020
15Aug2020 - 18Aug2020
22Aug2020

代替

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

用于打印日期的代码:

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

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

【问题讨论】:

  • XML 究竟是从哪里来的?
  • 尝试将日期字符串转换为日期对象,然后使用循环找出系列的最后日期。见:stackoverflow.com/q/15211132/5454852
  • 看起来很简单的编程任务,你到底在哪里挣扎?
  • 顺便说一下,standard way to represent 的时间间隔在文本上是用斜线字符分隔您的日期,而不是空格和连字符。 2020-08-15/2020-08-18

标签: java android xml date time


【解决方案1】:

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

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

循环结束后,打印当前间隔。

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

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

问题: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,这是现代类的后向端口(对于 JSR 310,ThreeTen;请参阅底部的链接)。
  • 在较旧的 Android 上,请使用脱糖或 Android 版本的 ThreeTen Backport。它被称为 ThreeTenABP。在后一种情况下,请确保从 org.threeten.bp 导入日期和时间类以及子包。

链接

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-08-19
    • 1970-01-01
    • 1970-01-01
    • 2021-06-08
    • 2014-08-05
    • 1970-01-01
    • 1970-01-01
    • 2021-09-12
    相关资源
    最近更新 更多