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

时间:2018-01-04 15:35:22

标签: 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 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 个答案:

答案 0 :(得分:1)

你做不到。 LocalDate没有,也没有格式。

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

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

作为妥协,您可以使用getFormattedDate方法使您的班级适合您的日期格式化为字符串。您决定是否会过多地模糊模型和演示文稿之间的分离,或者因为日期应始终格式化,在这种情况下,您可以接受。