使用自定义字符串初始化静态最终日期
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());
您可以:
将protected static final Date MAX_DATE;
更改为protected static final Date MAX_DATE = null;
并保留try-catch块
要摆脱 try-catch 块 - 在 Sample
和 {
之间添加 throws ParseException
我正在 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());
您可以:
将
protected static final Date MAX_DATE;
更改为protected static final Date MAX_DATE = null;
并保留try-catch块要摆脱 try-catch 块 - 在
之间添加Sample
和{
throws ParseException