有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

我有一个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;
    }

}

我有一段代码:

allProd.forEach((prod) -> {
    DateConverter dc = new DateConverter();
    LocalDate onMarket = dc.fromString(dc.toString(prod.getOnMarket()));
    System.out.println("localdate:" + onMarket);
    System.out.println("string:"+dc.toString(onMarket));
}

它打印了这个:

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字段,该字段应该总是格式化的。因此,我不想将字段数据类型更改为字符串


共 (1) 个答案

  1. # 1 楼答案

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

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

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

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