bra*_*orm 1 java calendar date
给定一年零一个月; 我想要两个Date Objects.一个startDate月份,一个end Date月份.我在这里实现了它,它的工作原理.但这看起来太冗长了,我想知道是否有一个简洁的解决方案;
例如,2014年3月,开始日期为3月1日,结束日期为3月31日(Date objects精确到毫秒)
public setDates(int month,int year) {
Calendar calendar = Calendar.getInstance();
// Use the calendar to get the startDate and endDate of this Invoice.
calendar.set(Calendar.YEAR, year);
calendar.set(Calendar.MONTH,month);
//set start date
calendar.set(Calendar.DAY_OF_MONTH,
calendar.getActualMinimum(Calendar.DAY_OF_MONTH));
calendar.set(Calendar.HOUR_OF_DAY,
calendar.getActualMinimum(Calendar.HOUR_OF_DAY));
calendar.set(Calendar.MINUTE,
calendar.getActualMinimum(Calendar.MINUTE));
calendar.set(Calendar.SECOND,
calendar.getActualMinimum(Calendar.SECOND));
calendar.set(Calendar.MILLISECOND,
calendar.getActualMinimum(Calendar.MILLISECOND));
this.startDate = calendar.getTime();
//endDate start date
calendar.set(Calendar.DAY_OF_MONTH,
calendar.getActualMaximum(Calendar.DAY_OF_MONTH));
calendar.set(Calendar.HOUR_OF_DAY,
calendar.getActualMaximum(Calendar.HOUR_OF_DAY));
calendar.set(Calendar.MINUTE,
calendar.getActualMaximum(Calendar.MINUTE));
calendar.set(Calendar.SECOND,
calendar.getActualMaximum(Calendar.SECOND));
calendar.set(Calendar.MILLISECOND,
calendar.getActualMaximum(Calendar.MILLISECOND));
this.endDate = calendar.getTime();
}
Run Code Online (Sandbox Code Playgroud)
通过做出一些假设,您可以使此代码更加简单:
然后,您可以通过添加一个月并减去一毫秒来找到该月的最后一毫秒.
所以代码看起来像这样:
// Note year/month reversal: try to consistently use larger units first. It
// makes for a cleaner API.
public setDates(int year, int month, TimeZone zone) {
Calendar calendar = Calendar.getInstance(zone);
// Do you really want 0-based months, like Java has? Consider month - 1.
calendar.set(year, month, 1, 0, 0, 0);
calendar.clear(Calendar.MILLISECOND);
startDate = calendar.getTime();
// Get to the last millisecond in the month
calendar.add(Calendar.MONTH, 1);
calendar.add(Calendar.MILLISECOND, -1);
endDate = calendar.getTime();
}
Run Code Online (Sandbox Code Playgroud)
要使用独占上限(正如我所推荐的那样),只需摆脱calendar.add(Calendar.MILLISECOND, -1)接近尾声.
哦,我完全建议使用Joda Time而不是java.util.Date等 - 这是一个更清洁的API.
| 归档时间: |
|
| 查看次数: |
1275 次 |
| 最近记录: |