如何将 LocalDate 对象格式化为 MM/dd/yyyy 并保持格式不变

Posted

技术标签:

【中文标题】如何将 LocalDate 对象格式化为 MM/dd/yyyy 并保持格式不变【英文标题】:How to format LocalDate object to MM/dd/yyyy and have format persist 【发布时间】:2017-02-03 00:45: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

【问题讨论】:

LocalDate 对象没有格式 - 它本身无法记住它必须采用特定格式,例如 MM/dd/yyyy 【参考方案1】:

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

parsedDate = text;

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

DateTimeFormatter formatters = DateTimeFormatter.ofPattern("d/MM/uuuu");
String text = date.format(formatters);

【讨论】:

cannot convert from String to LocalDate 尝试该作业时出错 哦,对不起,parsedDate 必须是一个字符串才能以该格式保存。所以你必须将 parsedDate 定义为一个字符串。 那么除了 yyyy-MM-dd 之外,没有其他格式可以让 LocalDate 变量采用,除非您将其存储为字符串?谢谢 不,请参阅 Joe C 的回答!也许它会更好地解释事情【参考方案2】:

在打印出来的时候格式化日期:

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));

【讨论】:

【参考方案3】:

简短回答:不。

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

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

【讨论】:

【参考方案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());

【讨论】:

以上是关于如何将 LocalDate 对象格式化为 MM/dd/yyyy 并保持格式不变的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 T 和 Z 将 LocalDate 格式化为 ISO 8601?

将json的日期属性反序列化为LocalDate

Java:无法从 TemporalAccessor 获取 LocalDate

localdate如何返回成字符串前端

杰克逊:将纪元反序列化为 LocalDate

我们如何将 com.datastax.driver.core.LocalDate 转换为 YYYY/MM/DD 格式?