【问题标题】:Save a formatted String to a LocalDate将格式化的字符串保存到 LocalDate
【发布时间】:2018-06-14 09:04:54
【问题描述】:

我有一个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 字段的类,并且该字段应始终被格式化。所以我不想将字段数据类型更改为字符串。

【问题讨论】:

  • 为什么不在示例代码中输出dc.toString(prod.getOnMarket())?日期本身没有格式化,它是一组值。如果您想要一致的表示,您可以将格式化的日期存储在 String 字段中,然后在您的 getDate() 方法中解析它。
  • @daniu 所以你建议我在我的类中将数据类型更改为字符串?
  • “本地日期字段且该字段应始终格式化”是什么意思? LocalDate 有自己的内部结构,你在控制台中看到的是toStringLocalDate 中是如何实现的。
  • @LolIPop65 不,这只是保持格式的唯一方法。我的建议是保留LocalDate 字段并在所有需要显示日期的地方使用DateTimeFormatter
  • @J-Alex 哦,我明白了。我想我可以改变 localdate 的结构,所以当我打印 localdate 时,它​​看起来像字符串值。

标签: java date-formatting java-time formatter localdate


【解决方案1】:

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

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

LocalDate 包含一个值,即日历中的日期,仅此而已。与int 保持值的方式非常相似。例如,int 可能包含值 64458。为了演示,您可以将其格式化为字符串,如 000000064458、+64458 或 64,458 甚至 64458.00 或十六进制。 int 保持不变。同样,无论您执行哪种格式化操作,您的 LocalDate 都保持不变。您只能在LocalDate 之外的String 中使用所需的格式。

作为一种折衷方案,您可以使用getFormattedDate 方法将您的日期格式化为字符串。您决定这是否会使模型和演示文稿之间的分离过于模糊,或者由于日期应该始终被格式化,在这种情况下它是您可以接受的。

【讨论】:

  • 是的,您无法格式化实际数据,但查看您可以操作它,但这并不意味着您已经修改了实际数据。
猜你喜欢
  • 1970-01-01
  • 2015-03-26
  • 1970-01-01
  • 2012-02-03
  • 2020-02-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-12-17
相关资源
最近更新 更多