我熟悉DateTime格式化程序,了解如何将LocalDate应用于单个变量,但不知道如何处理以下情况:

  1. 如果startOfWeek和endOfWeek具有相同的月份和年份,结果应该是
  2. 如果startOfWeek和endOfWeek没有相同的月份,结果应该是31 Oct - 6 Nov 2021
  3. 如果startOfWeek和endOfWeek没有相同的年份,结果应该是27 Dec 2020 - 2 Jan 2021

我没有找到如何应用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();

但它会以默认格式返回月份信息,例如9月份

Full example:

现在有人知道如何修复月份数据格式,或者如何同时使用带有两个LocalDate变量的DateTime格式化程序吗?

推荐答案

可以使用DateTimeFormatter来获得格式化的月份字符串

DateTimeFormatter month  = DateTimeFormatter.ofPattern("MMM");

除此之外,我还将使用3 DateTimeFormatter以及java.time API中的YearMonthYear类来完成这项任务,这将使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();
}

Java相关问答推荐

为什么JFrame paint()多次绘制同一点(或根本不绘制)?

Mongo DB Bson和Java:在子文档中添加和返回仅存在于父文档中的字段?

Java自定义ThreadPool—暂停任务提交并取消当前排队任务

S的字符串表示是双重精确的吗?

对运行在GraalVM-21上的JavaFX应用程序使用分代ZGC会警告不支持JVMCI,为什么?

为什么一个Test的instance?& gt;在构造函数中接受非空对象?

我找不到&Quot;配置&的位置

格式中的特定回录键-值对

在JDK 1.8源代码中,为什么使用A-B 0来确定哪个更大,而不是A B?

Java Mooc.fi Part 12_01.Hideout -返回和删除方法

使用htmlunit和java单击按钮

舰队运行配置Maven版本

如何在ApacheHttpClient 5中为单个请求设置代理?

如何在Struts2中使用操作类中的结果注释重定向到不同的命名空间

H2数据库仅支持%1个结果集?

Bash数组的单引号元素并使用空格连接

如何修复Spring Boot应用程序中的RestDocumentationGenerationException:java.io.FileNotFoundException:/curl-request.adoc(只读文件系统)?

由于版本不匹配,从Java 8迁移到Java 17和Spring 6 JUnit4失败

java构造函数中的冻结操作何时发生?

如何使用java区分以下结果