如何格式化 Java 中两个 LocalDate 变量的范围?
How to format range of two LocalDate variables in Java?
我熟悉有关将 LocalDate 应用于单个变量的 DateTime Formatter,但不知道如何处理以下情况:
我有两个 LocalDate 变量,例如 startOfWeek 和 endOfWeek。
我需要使用以下规则创建字符串结果:
- 如果 startOfWeek 和 endOfWeek 有相同的月份和年份,结果应该是这样的
3 - 2021 年 1 月 9 日(只是格式示例)
- 如果 startOfWeek 和 endOfWeek 不是同一个月,结果应该类似于 2021 年 10 月 31 日 - 11 月 6 日
- 如果 startOfWeek 和 endOfWeek 不是同一年,结果应该是 2020 年 12 月 27 日 - 2021 年 1 月 2 日
我没有找到如何应用 DateTime Formatter 来处理另外两个 LocalDate 变量,所以我这样做了:
if ((startOfWeek.getYear() != endOfWeek.getYear())){
result.append(startOfWeek.getDayOfMonth() + " " + startOfWeek.getMonth() + " " + startOfWeek.getYear() +
" - " + endOfWeek.getDayOfMonth() + " " + endOfWeek.getMonth() + " " + startOfWeek.getYear());
return result.toString();
} else if ((startOfWeek.getMonth() != endOfWeek.getMonth())) {
result.append(startOfWeek.getDayOfMonth() + " " + startOfWeek.getMonth() +
" - " + endOfWeek.getDayOfMonth() + " " + endOfWeek.getMonth() + " " + startOfWeek.getYear());
return result.toString();
} else {
result.append(startOfWeek.getDayOfMonth() +
" - " + endOfWeek.getDayOfMonth() + " " + startOfWeek.getMonth() + " " + startOfWeek.getYear());
return result.toString();
但它 return 默认格式的月份信息,例如 SEPTEMBER
Full example:
现在有人知道如何修复月份数据格式或如何同时将 DateTime Formatter 与两个 LocalDate 变量一起使用吗?
预先感谢您的帮助。
您可以直接在 getMonth()
方法上使用 .getDisplayName(...)
方法来获取所需的本地化月份名称格式。对于您的情况,这是一个示例代码:
startOfWeek.getMonth().getDisplayName(TextStyle.SHORT_STANDALONE,Locale.getDefault())
endOfWeek.getMonth().getDisplayName(TextStyle.SHORT_STANDALONE, Locale.getDefault())
您可以使用 DateTimeFormatter
来获取格式化的月份字符串
DateTimeFormatter month = DateTimeFormatter.ofPattern("MMM");
除此之外,我会用 3 DateTimeFormatter
s 和 YearMonth
和 Year
类 从 java.time
API 这可以使您的 if else 块更具可读性:
import java.time.LocalDate;
import java.time.Year;
import java.time.YearMonth;
import java.time.format.DateTimeFormatter;
import java.util.List;
....
static String formattedRange (LocalDate start, LocalDate end){
DateTimeFormatter onlyDate = DateTimeFormatter.ofPattern("d");
DateTimeFormatter dateAndMonth = DateTimeFormatter.ofPattern("d MMM");
DateTimeFormatter dateMonthYear = DateTimeFormatter.ofPattern("d MMM yyyy");
StringBuilder result = new StringBuilder();
if (YearMonth.from(start).equals(YearMonth.from(end))){
result.append(onlyDate.format(start)).append(" - ")
.append(dateMonthYear.format(end));
}
else if (Year.from(start).equals(Year.from(end))){
result.append(dateAndMonth.format(start)).append(" - ")
.append(dateMonthYear.format(end));
}
else {
result.append(dateMonthYear.format(start)).append(" - ")
.append(dateMonthYear.format(end));
}
return result.toString();
}
我只使用 Formatter 字符串:
String format;
if (startOfWeek.getYear() != endOfWeek.getYear()) {
format = "%te %<tb %<tY - %te %<tb %<tY";
} else if (startOfWeek.getMonth() != endOfWeek.getMonth()) {
format = "%te %<tb - %te %<tb %<tY";
} else {
format = "%te - %te %<tb %<tY";
}
return String.format(format, startOfWeek, endOfWeek);
我熟悉有关将 LocalDate 应用于单个变量的 DateTime Formatter,但不知道如何处理以下情况: 我有两个 LocalDate 变量,例如 startOfWeek 和 endOfWeek。 我需要使用以下规则创建字符串结果:
- 如果 startOfWeek 和 endOfWeek 有相同的月份和年份,结果应该是这样的 3 - 2021 年 1 月 9 日(只是格式示例)
- 如果 startOfWeek 和 endOfWeek 不是同一个月,结果应该类似于 2021 年 10 月 31 日 - 11 月 6 日
- 如果 startOfWeek 和 endOfWeek 不是同一年,结果应该是 2020 年 12 月 27 日 - 2021 年 1 月 2 日
我没有找到如何应用 DateTime Formatter 来处理另外两个 LocalDate 变量,所以我这样做了:
if ((startOfWeek.getYear() != endOfWeek.getYear())){
result.append(startOfWeek.getDayOfMonth() + " " + startOfWeek.getMonth() + " " + startOfWeek.getYear() +
" - " + endOfWeek.getDayOfMonth() + " " + endOfWeek.getMonth() + " " + startOfWeek.getYear());
return result.toString();
} else if ((startOfWeek.getMonth() != endOfWeek.getMonth())) {
result.append(startOfWeek.getDayOfMonth() + " " + startOfWeek.getMonth() +
" - " + endOfWeek.getDayOfMonth() + " " + endOfWeek.getMonth() + " " + startOfWeek.getYear());
return result.toString();
} else {
result.append(startOfWeek.getDayOfMonth() +
" - " + endOfWeek.getDayOfMonth() + " " + startOfWeek.getMonth() + " " + startOfWeek.getYear());
return result.toString();
但它 return 默认格式的月份信息,例如 SEPTEMBER
Full example:
现在有人知道如何修复月份数据格式或如何同时将 DateTime Formatter 与两个 LocalDate 变量一起使用吗? 预先感谢您的帮助。
您可以直接在 getMonth()
方法上使用 .getDisplayName(...)
方法来获取所需的本地化月份名称格式。对于您的情况,这是一个示例代码:
startOfWeek.getMonth().getDisplayName(TextStyle.SHORT_STANDALONE,Locale.getDefault())
endOfWeek.getMonth().getDisplayName(TextStyle.SHORT_STANDALONE, Locale.getDefault())
您可以使用 DateTimeFormatter
来获取格式化的月份字符串
DateTimeFormatter month = DateTimeFormatter.ofPattern("MMM");
除此之外,我会用 3 DateTimeFormatter
s 和 YearMonth
和 Year
类 从 java.time
API 这可以使您的 if else 块更具可读性:
import java.time.LocalDate;
import java.time.Year;
import java.time.YearMonth;
import java.time.format.DateTimeFormatter;
import java.util.List;
....
static String formattedRange (LocalDate start, LocalDate end){
DateTimeFormatter onlyDate = DateTimeFormatter.ofPattern("d");
DateTimeFormatter dateAndMonth = DateTimeFormatter.ofPattern("d MMM");
DateTimeFormatter dateMonthYear = DateTimeFormatter.ofPattern("d MMM yyyy");
StringBuilder result = new StringBuilder();
if (YearMonth.from(start).equals(YearMonth.from(end))){
result.append(onlyDate.format(start)).append(" - ")
.append(dateMonthYear.format(end));
}
else if (Year.from(start).equals(Year.from(end))){
result.append(dateAndMonth.format(start)).append(" - ")
.append(dateMonthYear.format(end));
}
else {
result.append(dateMonthYear.format(start)).append(" - ")
.append(dateMonthYear.format(end));
}
return result.toString();
}
我只使用 Formatter 字符串:
String format;
if (startOfWeek.getYear() != endOfWeek.getYear()) {
format = "%te %<tb %<tY - %te %<tb %<tY";
} else if (startOfWeek.getMonth() != endOfWeek.getMonth()) {
format = "%te %<tb - %te %<tb %<tY";
} else {
format = "%te - %te %<tb %<tY";
}
return String.format(format, startOfWeek, endOfWeek);