gpt4 book ai didi

java - 日历方法 getTimeInMillis() 返回错误值

转载 作者:太空宇宙 更新时间:2023-11-04 06:08:31 26 4
gpt4 key购买 nike

我有一个验证方法,它将接受两个输入作为开始日期和结束日期,并检查结束日期是否有效,即在开始日期之后。我使用日历方法 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-01-31 是开始日期,2015-02-01 是结束日期。由于开始日期(2015-01-31)的毫秒值大于结束日期(2015-02-01),因此它给出了错误的结果。

那么这是 Calendar 类的方法 getTimeInMillis() 的问题还是我做错了什么?

最佳答案

这可能是由于 Calendar.getInstance() 为您提供了当前时间戳(填充了所有字段,如小时、分钟等),而您没有明确清除这些额外字段(您只设置了年、月和日期)。

此外,请记住 dat Calendar.set(intyear, intmonth,intday) 使用基于 0 的月份(例如 Jan = 0、Feb = 1 等),因此您的转换当前是错误的。

更新:我认为这是两者的结合;您的测试日期 2015-01-31 被解析为 2015 年 2 月 31 日,这当然是无效的,导致意外的 getTimeInMillis() 值。

关于java - 日历方法 getTimeInMillis() 返回错误值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29029549/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com