我有一个验证方法,将采用两个输入作为开始日期和结束日期,并检查结束日期是否有效,即在开始日期之后。 我使用日历方法getTimeInMillis()
获取两个日期的毫秒数并获得差异。如果差值是负值,则其无效结束日期,即结束日期在开始日期之前。 结束日期的毫秒值应始终大于开始日期。但在某些情况下,getTimeInMillis()
在开始日期的情况下会给予更大的价值。日历方法getTimeInMillis()返回错误的值
这里是我的代码:
public class ValidationProcessor {
private void testTimeDiff(String startDate, String endDate) throws Exception {
Calendar cal1 = Calendar.getInstance(TimeZone.getTimeZone("UTC"));
Calendar cal2 = Calendar.getInstance(TimeZone.getTimeZone("UTC"));
// Set the dates for calendars
cal1.set(Integer.parseInt(startDate.split("-")[0]), Integer.parseInt(startDate.split("-")[1]),
Integer.parseInt(startDate.split("-")[2]));
cal2.set(Integer.parseInt(endDate.split("-")[0]), Integer.parseInt(endDate.split("-")[1]),
Integer.parseInt(endDate.split("-")[2]));
long milis1 = cal1.getTimeInMillis();
long milis2 = cal2.getTimeInMillis();
System.out.println("milis1::: " + milis1);
System.out.println("milis2::: " + milis2);
long diff = milis2 - milis1;
System.out.println("diff::: " + diff);
if (diff <= 0) {
throw new Exception("Invalid End Date. End Date Must Be After Start Date");
}
}
public static void main(String args[]) {
ValidationProcessor test = new ValidationProcessor();
try {
test.testTimeDiff("2015-01-31", "2015-02-01");
} catch (Exception ex) {
ex.printStackTrace();
}
}
}
输出是:
milis1::: 1425367717308
milis2::: 1425194917308
diff::: -172800000
java.lang.Exception: Invalid End Date. End Date Must Be After Start Date
这里2015年1月31日是开始日期和2015年2月1日是结束日期。 由于开始日期(2015-01-31)以毫秒为单位的数值大于结束日期(2015-02-01),因此它给出了错误的结果。
那么,这是一个方法getTimeInMillis()
Calendar
类的问题,或者我做错了什么?