Men*_*los -3 java calendar final date
我目前有以下代码,由于我怀疑static block在分配之前没有被调用,因此无法正常工作programCutoffDate2015.
private final static Calendar programCutoffDate2015Cal = Calendar.getInstance();
static{
programCutoffDate2015Cal.set(2015, 12,31);
}
private final static Date programCutoffDate2015 = programCutoffDate2015Cal.getTime();
Run Code Online (Sandbox Code Playgroud)
以前我使用的是已弃用的API:
private final static Date programCutoffDate2015 = new Date(2015, 12,31);
Run Code Online (Sandbox Code Playgroud)
如何使用JDK中未弃用的较新API来完成相同的结果?
Date没有时区概念,而且是可变的.在过去几十年左右的时间里,API的差异很大.我建议使用JSR 310 API,添加到Java 8,但旧版本的后端可用.
LocalDate date = LocalDate.of(2015,12,31);
Run Code Online (Sandbox Code Playgroud)
注意:虽然这是基于JodaTime的良好工作,但它是一个不同的API.
有没有办法在programCutoffDate2015声明或其他方式之前执行静态块?
静态块按顺序执行,从上到下显示在代码中.即使多个线程同时尝试加载类,也无法更改此设置.
假设你有另一个API,你有上面的问题,我建议用一个辅助方法包装它.
private static Date newDate(int year, int month, int day) {
Calendar cal = Calendar.getInstance();
cal.set(year, month, day);
// if you want the last milli-second of the day for an upper bound
cal.add(Calendar.DAY_OF_MONTH, 1);
cal.add(Calendar.MILLISECOND, -1);
return cal.getTime();
}
private final static Date programCutoffDate2015 = newDate(2015, 12, 31);
Run Code Online (Sandbox Code Playgroud)
甚至更好
private static LcoalDate lastDayOf(int year) {
return LocalDate.of(year+1, 1, 1).minusDays(1);
}
Run Code Online (Sandbox Code Playgroud)
Date和之间的显着差异LocalDate是日期有一个时间包括虽然这可能不是2015/12/31 12:00你的Date对象仍然在2015年之后. LocalDate只是一个日期,如果你想要一个时间,你可以使用LocalDateTime
| 归档时间: |
|
| 查看次数: |
118 次 |
| 最近记录: |