使用自定义字符串初始化静态最终日期

Initialize static final Date using custom String

我正在 Java 工作并遇到了一个随机问题。 在这里我分享了我的问题的示例代码。

我想用我的自定义字符串格式初始化一些静态最终日期字段。

public class Sample {
    protected static final Date MAX_DATE ;
    static {
        try {
            MAX_DATE = new SimpleDateFormat("yyyy-MM-dd").parse("2099-12-31");
        } catch (ParseException e) {
            e.printStackTrace();
        }

    }
}

虽然直接放在下面,但它要求尝试和捕捉。

protected static final Date MAX_DATE= new SimpleDateFormat("yyyy-MM-dd").parse("2099-12-31");

当我按照上面的代码添加 try 和 catch 时,它抛出一个错误

Variable 'MAX_DATE' might not have been initialized

使用以下代码初始化时,它开始在第 5 行抛出 Cannot assign a value to final variable 'MAX_DATE' 错误。

protected static final Date MAX_DATE=null;

有人可以帮我解决这个问题吗?

如果你只需要一个简单的日期,你应该使用 LocalDate 而不是 Date:

protected static final LocalDate MAX_DATE = LocalDate.of(2099, 12, 31);

如果(出于某种原因)必须从字符串中获取日期,您也可以按如下方式使用它:

protected static final LocalDate MAX_DATE = LocalDate.parse("2099-12-31");

万一实在是硬要求

  • 从任意模式的字符串中解析日期
  • 好好用' java.util.Date

类似的东西应该可以解决问题:

protected static final Date MAX_DATE = Date.from(LocalDate.parse("2088||12||31", DateTimeFormatter.ofPattern("yyyy||MM||dd")).atStartOfDay(ZoneId.systemDefault()).toInstant());

您可以:

  1. protected static final Date MAX_DATE;更改为protected static final Date MAX_DATE = null;并保留try-catch块

  2. 要摆脱 try-catch 块 - 在 Sample{

    之间添加 throws ParseException