【发布时间】:2014-02-04 20:48:32
【问题描述】:
给定一年零一个月;我想要两个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();
}
【问题讨论】:
-
你可以使用 Joda Time 吗?它会让事情变得简单很多。此外,请考虑您对哪个时区感兴趣 - 对于不同的时区,该月将在不同的时间开始和结束。最后,考虑使用独占上限而不是包容上限 - 所以基本上是下个月的开始。
-
以什么方式使用独占上界?我不知道乔达时间是什么。所以我需要一些时间来阅读和理解..
-
我认为 Joda Time 将成为这个的基础:download.java.net/jdk8/docs/api/java/time/package-summary.html
-
它没有那么复杂(对于你的任务),你可以试试。但是如果你坚持使用 JDK 7 的内置功能,你也可以。
-
@user1988876:有了独占上界,您无需担心您是取当月最后一天的开始还是end 一个月的最后一天,等等 - 一个间隔的唯一上限是下一个间隔的包含下限。