java.time
java.time 是现代 Java 数据和时间 API,可以满足您的大部分需求。只有死了才知道你的财政年度。您要求的季度比 java.time 支持的 ISO 日历系统中使用的季度少一个。所以我的技巧是从日期中减去四分之一,然后查询 java.time 有关季度和年份的信息。这将为您提供所需的数字。
在代码中,尝试不同的日期:
LocalDate[] exampleDates = {
LocalDate.of(2020, Month.JANUARY, 1),
LocalDate.of(2020, Month.JUNE, 30),
LocalDate.of(2020, Month.AUGUST, 22),
LocalDate.of(2020, Month.OCTOBER, 1),
LocalDate.of(2021, Month.MARCH, 31),
};
for (LocalDate date : exampleDates) {
LocalDate syntheticQuarterDate = date.minus(1, IsoFields.QUARTER_YEARS);
// Get quarter number and year as int
int quarter = syntheticQuarterDate.get(IsoFields.QUARTER_OF_YEAR);
int year = syntheticQuarterDate.getYear();
System.out.format("Quarter: %d; year: %d%n", quarter, year);
}
输出是:
Quarter: 4; year: 2019
Quarter: 1; year: 2020
Quarter: 2; year: 2020
Quarter: 3; year: 2020
Quarter: 4; year: 2020
假设你想要一个像这样的字符串Q42019
而不是数字。在这种情况下,最好使用格式化程序:
DateTimeFormatter quarterFormatter
= DateTimeFormatter.ofPattern("QQQuuuu", Locale.ENGLISH);
现在对于每个日期执行以下操作:
// Print a string like "Q42019"
String quarterString = syntheticQuarterDate.format(quarterFormatter);
System.out.println(quarterString);
使用与之前相同的日期输出:
Q42019
Q12020
Q22020
Q32020
Q42020
问题:这适用于 Java 7 吗?
java.time 在 Java 7 上运行良好。它至少需要Java 6.
- 在 Java 8 及更高版本以及较新的 Android 设备(从 API 级别 26 开始)中,现代 API 是内置的。
- 在非 Android Java 6 和 7 中,获取 ThreeTen Backport,即现代类的向后移植(ThreeTen for JSR 310;请参阅底部的链接)。
- 在较旧的 Android 上,可以使用脱糖或 Android 版本的 ThreeTen Backport。它被称为 ThreeTenABP。在后一种情况下,请确保从以下位置导入日期和时间类
org.threeten.bp
与子包。
Links
-
Oracle 教程:日期时间 https://docs.oracle.com/javase/tutorial/datetime/解释如何使用 java.time。
-
Java 规范请求 (JSR) 310 https://jcp.org/en/jsr/detail?id=310, where
java.time
首次被描述。
-
ThreeTen 后移植项目 http://www.threeten.org/threetenbp/,向后移植
java.time
到 Java 6 和 7(JSR-310 为 ThreeTen)。
- 通过脱糖提供 Java 8+ API https://developer.android.com/studio/write/java8-support-table
-
三十ABP https://github.com/JakeWharton/ThreeTenABP, Android 版 ThreeTen Backport
-
问题:如何在Android项目中使用ThreeTenABP https://stackoverflow.com/questions/38922754/how-to-use-threetenabp-in-android-project,有非常详尽的解释。
- 我的回答也是受到启发而写的这个重复的问题:Java:如何根据给定日期获取季度[重复] https://stackoverflow.com/q/63404039/5772882