我将治疗的开始日期与其结束进行比较,以检查治疗是否持续超过6个月。如果这个时期不包括二月,那么一切都很好,但是如果我比较1月1日到6月30日,它会抛出我的例外情况。为了比较这两个时期,我将6个月添加到开始日期,并将结果与结束日期进行比较,如下所示:
Date start = new Date(2017,1,1);
Date end = new Date(2017,6,30);
Calendar startOfTreatment = new Calendar.getInstance();
startOfTreatment.setTime(start);
Calendar endOfTreatment = new Calendar.getInstance();
endOfTreatment.setTime(end);
startOfTreatment.add(Calendar.MONTH, 6);
if (startOfTreatment.compareTo(endOfTreatment) > 0) {
throw new InfinishedTreatmentException(startOfTreatment,endOfTreatment);
}
我该如何解决这个问题?
答案 0 :(得分:1)
offset = new kafka.Offset(consumer.client);
offset.commit(groupId, [{ topic: topic, partition: 0, offset: -1 }],
function (err, data) {
logger.debug("tried to set offset: ", data);
if (err) logger.error("error", err);
})
);
构造函数(例如您正在使用的构建函数:Date
)不仅已弃用(因此您应该避免使用它们),还要误导性,因为年份在1900年被索引(因此2017年变为3917)并且月份被零索引(值在零(1月)到11(12月)的范围内)。所以这并不像你想象的那样:
new Date(2017,1,1)
当您向Date start = new Date(2017, 1, 1); // February 1st 3917
Date end = new Date(2017, 6, 30); // July 30th 3917
添加6个月时,它会变为 8月1日 st ,这是start
之后。
要创建1月1日 st 和6月30日 th ,您必须使用end
并拥有2017年,您必须使用117(2017 - 1900):
month - 1
即使Date start = new Date(117, 0, 1); // January 1st 2017
Date end = new Date(117, 5, 30); // June 30th 2017
加上6个月 7月1日 st ,仍然在start
之后(因此您的代码将抛出除外)。
旧类(end
,Date
和Calendar
)有lots of problems和design issues,并且它们被新API取代
在 Java< = 7 中,您可以使用ThreeTen Backport,这是Java 8新日期/时间类的绝佳后端。
这个新API有lots of new date and time types来处理不同的情况。由于我们只处理日期(日/月/年),我们可以使用SimpleDateFormat
:
org.threeten.bp.LocalDate