添加两个longs会带来较低的结果

时间:2016-02-03 15:59:40

标签: java android math long-integer

我想在开始的那一天增加35天。我得到的结果低于开始日。

以下是代码:

DatePickerDialog dpd = new DatePickerDialog(this, dpickerListener, g_year, g_month, g_day);
DatePicker dp = dpd.getDatePicker();
System.out.println("g_DateCycle.getTime()" + g_DateCycle.getTime());
dp.setMinDate(g_DateCycle.getTime());
long FinCycle=g_DateCycle.getTime();
System.out.println("FinCycle : " + FinCycle);
FinCycle= FinCycle +(g_GridDayNumber*(24*60*60*1000));
System.out.println("FinCycle : " + FinCycle);
dp.setMaxDate(FinCycle);
return dpd;

我收到了一个错误:

java.lang.IllegalArgumentException: fromDate: Sun Jan 31 00:00:00 CET 2016 does not precede toDate: Sat Jan 16 06:57:12 CET 2016

以及以下输出:

02-03 16:52:16.724 20157-20157/com.inverseo.marc.t372lematin I/System.out: g_DateCycle.getTime()1454194800000
02-03 16:52:16.724 20157-20157/com.inverseo.marc.t372lematin I/System.out: FinCycle : 1454194800000
02-03 16:52:16.724 20157-20157/com.inverseo.marc.t372lematin I/System.out: FinCycle : 1452923832704

我无法弄清楚为什么在g_GridDayNumber*(24*60*60*1000)添加g_GridDayNumber=35时,我可以获得较低的长度!

感谢您的帮助

1 个答案:

答案 0 :(得分:2)

public ActionResult Index(string username, string password) { if (username != "" && password != "") { //checking is user already exists //Here problem arise... var query = db.Users.Where(i => i.Username.Equals(username)).ToList(); User res = null; if(query.Count == 1) { res = query.First(); } if (res != null) { //My remaining code } } return View("Index"); } ,它大于Java中整数所允许的最大值,并且在两个补码中变为35*(24*60*60*1000) = 3,024,000,000

将其中一个指定为long,它应该可以正常工作。注意L在下面的数字24之后指定很长时间:

-1,270,967,296