英文:
Print consecutive dates using hyphen
问题
Sure, here's the translated content:
我有一串以ddMMMyyyy形式存储的日期列表,这些日期可能连续也可能不连续。我会将这些日期逐个打印出来。如果日期是连续的,我想要将它们用连字符连接起来。
例如
13Aug2020
15Aug2020 - 18Aug2020
22Aug2020
而不是
13Aug2020
15Aug2020
16Aug2020
17Aug2020
18Aug2020
22Aug2020
用于打印日期的代码:
mDateView.setText(mDateValue.replace(",", "\n"));
其中,mDateView是一个TextView,mDateValue是包含所有日期的字符串,日期之间用逗号分隔。
英文:
I have a list of dates in the form of ddMMMyyyy stored in one single string. The dates may or may not be consecutive
I print those dates as individual dates. I want to remove that and use hyphen if the dates are consecutive.
For Example
13Aug2020
15Aug2020 - 18Aug2020
22Aug2020
Instead of
13Aug2020
15Aug2020
16Aug2020
17Aug2020
18Aug2020
22Aug2020
Code used to Print Dates :
mDateView.setText(mDateValue.replace(",", "\n"));
where mDateView is a Textview and mDateValue is the String containing all the dates seperated by Commas
答案1
得分: 2
使用 DateTimeFormatter
将每个字符串解析为 LocalDate
对象。搜索如何做到这一点(如果搜索结果指向使用旧的且麻烦的 SimpleDateFormat
的页面,则避免那种情况)。为当前间隔创建两个变量,分别表示起始日期和结束日期。将第一个日期存储在两个变量中。在循环中遍历剩余的日期:
- 如果当前日期是结束日期的后一天,则将其存储在结束日期中,从而将间隔延长一天。
- 否则打印当前间隔,关于如何打印,请参见下文。然后再次将当前日期存储在起始和结束日期中。
循环终止后,打印当前间隔。
如何打印当前间隔:如果起始日期和结束日期相等,则只打印其中一个;否则在它们之间用一个中划线打印。在任何情况下,都使用所需格式对每个打印的日期进行格式化,例如使用相同的 DateTimeFormatter
进行格式化。
要确定当前日期是否是结束日期的后一天,使用 LocalDate
的 plusDays
和 isEqual
方法。
问题:LocalDate
不是需要 Android API 级别 26 吗?
LocalDate
是 java.time
中的一部分,这是现代的 Java 日期和时间 API。java.time
在较旧和较新的 Android 设备上都可以很好地工作。它只需要至少 Java 6。
- 在 Java 8 及更高版本以及更新的 Android 设备(从 API 级别 26 开始),现代 API 已内置。
- 在非 Android 的 Java 6 和 7 中,可以使用 ThreeTen Backport,这是现代类的后移版本(ThreeTen for JSR 310;请参见底部的链接)。
- 在较旧的 Android 设备上,可以使用 desugaring 或者 Android 版的 ThreeTen Backport(称为 ThreeTenABP)。在后一种情况下,请确保从
org.threeten.bp
及其子包中导入日期和时间类。
链接
- Oracle 教程:日期时间 解释了如何使用
java.time
。 DateTimeFormatter
的文档- Java 规范请求 (JSR) 310,首次描述了
java.time
。 - ThreeTen Backport 项目,将
java.time
后移至 Java 6 和 7(ThreeTen for JSR-310)。 - 通过 desugaring 提供的 Java 8+ API
- ThreeTenABP,ThreeTen Backport 的 Android 版本
- 问题:如何在 Android 项目中使用 ThreeTenABP,附有非常详细的解释。
英文:
Parse each string into a LocalDate
object using a DateTimeFormatter
. Search for how (if your search leads to a page using the old and troublesome SimpleDateFormat
, avoid that). Create two variables for the start and end of the current interval. Store the first date into both. In a loop over the remaining dates:
- If the current date is one day after the end, store it into the end, thus extending the interval by one day.
- Otherwise print the current interval, see below for how. Then again store the current date into both start and end.
After the loop terminates, print the current interval.
How to print the current interval: if start and end are equal, print only one of them; otherwise print both with an en-dash between them. In either case format each printed date into the desired format, for example the original format using the same DateTimeFormatter
.
To determine whether current date is one day after end, use the plusDays
and the isEqual
methods of LocalDate
.
Question: Doesn’t LocalDate
require Android API level 26?
LocalDate
is part of java.time, the modern Java date and time API. java.time works nicely on both older and newer Android devices. It just requires at least Java 6.
- In Java 8 and later and on newer Android devices (from API level 26) the modern API comes built-in.
- In non-Android Java 6 and 7 get the ThreeTen Backport, the backport of the modern classes (ThreeTen for JSR 310; see the links at the bottom).
- On older Android either use desugaring or the Android edition of ThreeTen Backport. It’s called ThreeTenABP. In the latter case make sure you import the date and time classes from
org.threeten.bp
with subpackages.
Links
- Oracle tutorial: Date Time explaining how to use java.time.
- Documentation of
DateTimeFormatter
- Java Specification Request (JSR) 310, where
java.time
was first described. - ThreeTen Backport project, the backport of
java.time
to Java 6 and 7 (ThreeTen for JSR-310). - Java 8+ APIs available through desugaring
- ThreeTenABP, Android edition of ThreeTen Backport
- Question: How to use ThreeTenABP in Android Project, with a very thorough explanation.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论