24

我正在阅读文本并将日期存储为 LocalDate 变量。

有什么方法可以让我保留 DateTimeFormatter 的格式,这样当我调用 LocalDate 变量时它仍然是这种格式。

编辑:我希望 parsedDate 以 25/09/2016 的正确格式存储,而不是作为字符串打印

我的代码:

public static void main(String[] args) 
{
    LocalDate date = LocalDate.now();
    DateTimeFormatter formatters = DateTimeFormatter.ofPattern("d/MM/uuuu");
    String text = date.format(formatters);
    LocalDate parsedDate = LocalDate.parse(text, formatters);

    System.out.println("date: " + date); // date: 2016-09-25
    System.out.println("Text format " + text); // Text format 25/09/2016
    System.out.println("parsedDate: " + parsedDate); // parsedDate: 2016-09-25

    // I want the LocalDate parsedDate to be stored as 25/09/2016
}
4

4 回答 4

39

编辑:考虑到您的编辑,只需将 parsedDate 设置为等于您的格式化文本字符串,如下所示:

parsedDate = text;

LocalDate 对象只能以 ISO8601 格式 (yyyy-MM-dd) 打印。为了以其他格式打印对象,您需要对其进行格式化并将 LocalDate 保存为字符串,就像您在自己的示例中演示的那样

DateTimeFormatter formatters = DateTimeFormatter.ofPattern("d/MM/uuuu");
String text = date.format(formatters);
于 2016-09-25T17:51:38.693 回答
12

打印时只需格式化日期:

public static void main(String[] args) {
    LocalDate date = LocalDate.now();
    DateTimeFormatter formatters = DateTimeFormatter.ofPattern("d/MM/uuuu");
    String text = date.format(formatters);
    LocalDate parsedDate = LocalDate.parse(text, formatters);

    System.out.println("date: " + date);
    System.out.println("Text format " + text);
    System.out.println("parsedDate: " + parsedDate.format(formatters));
}
于 2016-09-25T17:46:58.363 回答
4

不,您不能保留格式,因为您不能覆盖 LocalDate 的 toString(LocalDate 的构造函数是私有的,不可能扩展),并且没有一种方法可以持久地更改 LocalDate 中的格式。

也许,您可以创建一个新类并使用静态方法来更改格式,但是当您需要其他格式时,您必须始终使用 MyLocalDate.myToString(localDate) 而不是 localDate.toString()。

 public class MyLocalDate {
    
    public static String myToString(LocalDate localDate){
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd-MM-yyyy");
        return localDate.format(formatter);
    }   
}

当您调用时,您必须使用这种方式

FechaInicioTextField.setText(MyLocalDate.myToString(fechaFacturaInicial));

代替

FechaInicioTextField.setText(fechaFacturaInicial.toString());
于 2020-08-04T20:52:50.527 回答
4

简短的回答:没有。

长答案:ALocalDate是一个代表年、月和日的对象,它们是它将包含的三个字段。它没有格式,因为不同的语言环境将有不同的格式,并且它会使执行想要在 a 上执行的操作变得更加困难LocalDate(例如添加或减去天数或添加时间)。

字符串表示(由 产生toString())是关于如何打印日期的国际标准。如果您想要不同的格式,您应该使用DateTimeFormatter您选择的格式。

于 2016-09-25T19:46:01.553 回答