Java 将格式化字符串保存到LocalDate

Java 将格式化字符串保存到LocalDate,java,date-formatting,java-time,formatter,localdate,Java,Date Formatting,Java Time,Formatter,Localdate,我有一个DateConverter类: public class DateConverter extends StringConverter<LocalDate> { String pattern = "EEE, dd. MM. uuuu"; DateTimeFormatter formatter = DateTimeFormatter.ofPattern(pattern,Locale.US); @Override public String to

我有一个
DateConverter
类:

public class DateConverter extends StringConverter<LocalDate> {

    String pattern = "EEE, dd. MM. uuuu";
    DateTimeFormatter formatter = DateTimeFormatter.ofPattern(pattern,Locale.US);

    @Override
    public String toString(LocalDate object) {
        try {
            return formatter.format(object);
        } catch(Exception ex) {
            return "";
        }      
    }

    @Override
    public LocalDate fromString(String string) {
        try {
            return LocalDate.parse(string, formatter);
        } catch(Exception ex) {
            return null;
        }
    }

    public String getPattern(){
        return pattern;
    }

}
它打印了这个:

localdate:2012-11-08
string:Thu, 08. 11. 2012
localdate:2011-11-13    
string:Sun, 13. 11. 2011
localdate:2002-04-11
string:Thu, 11. 04. 2002

我想要的是我的
LocalDate
值的格式与字符串值相同。因为我有一个类,它有一个
LocalDate
字段,该字段应该总是格式化的。因此,我不想将字段数据类型更改为字符串

你不能。
LocalDate
中没有格式,也不能有格式

如果您坚持模型和演示的分离,那么将格式放入日期也是不正确的。
LocalDate
是您的模型的一部分(我猜)。
EEE,dd.MM。UUU
格式属于您的演示文稿。您的转换器类将两者连接起来

LocalDate
保存一个值,日历中的一个日期,没有其他内容。与
int
保存值的方式大致相同。例如,
int
可以保存值64458。对于演示文稿,您可以将其格式化为0000000 64458、+64458或64458等字符串,甚至64458.00或十六进制。
int
保持不变。同样地,
LocalDate
无论执行何种格式化操作,都保持不变。您只能在
LocalDate
之外的
字符串中使用所需的格式


作为一种折衷方法,您可以为类提供一个将日期格式化为字符串的
getFormattedDate
方法。您可以决定这是否会过多地模糊模型和表示之间的分离,或者因为日期应该始终格式化,在这种情况下,您可以接受。

为什么不在示例代码中输出
dc.toString(prod.getOnMarket())
?日期本身不是格式化的,它是一组值。如果您想要一致的表示形式,您可以将格式化的日期存储在
String
字段中,然后在
getDate()
方法中对其进行解析。@daniu那么您建议我在类中将数据类型更改为字符串?您所说的“localdate字段和字段应始终格式化”是什么意思
LocalDate
有自己的内部结构,您在控制台中看到的是如何在
LocalDate
@LolIPop65中实现
toString
。不,这只是保持格式的唯一方法。我建议您保留
LocalDate
字段,并在所有需要显示日期的地方使用
DateTimeFormatter
。@J-Alex oh我理解。我想我可以更改localdate的结构,这样当我打印localdate时,它将看起来像字符串值。是的,您不能格式化实际数据,但查看时可以对其进行操作,但这并不意味着您修改了实际数据。
localdate:2012-11-08
string:Thu, 08. 11. 2012
localdate:2011-11-13    
string:Sun, 13. 11. 2011
localdate:2002-04-11
string:Thu, 11. 04. 2002