如何将 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?