GetTimeinMillis дает отрицательное значение

Это моя дата

Thu Feb 20 18:34:00 GMT+5:30 2014 

Когда я использую getTimeInMillis (), я получаю отрицательное значение (-5856679776000). Это должно быть что-то позитивное. Может ли кто-нибудь сказать мне, почему?

Сохраненная дата, т.е. cal1, дает отрицательное значение, а вторая дата, т.е. текущая дата, является положительной.

 SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss",java.util.Locale.getDefault()); try { java.util.Date d = format.parse(date+" "+time); GregorianCalendar cal1 = new GregorianCalendar(d.getYear(), d.getMonth(), d.getDay(), d.getHours(), d.getMinutes()); Calendar cal = Calendar.getInstance(); GregorianCalendar cal2 = new GregorianCalendar(cal.get(Calendar.YEAR), cal.get(Calendar.MONTH), cal.get(Calendar.DAY_OF_MONTH), cal.get(Calendar.HOUR_OF_DAY), cal.get(Calendar.MINUTE)); Toast.makeText(getApplicationContext(), "Stored date " + d + "\nCurrent date " + cal.getTime() + "\nStored date in ms :" + cal1.getTimeInMillis() + "\nCurrent time in ms :" + cal2.getTimeInMillis()+ "\nDifference " + ((cal1.getTimeInMillis()-cal2.getTimeInMillis())/1000), Toast.LENGTH_LONG).show(); } catch(Exception e) { Toast.makeText(getApplicationContext(),"Date parsing error", Toast.LENGTH_LONG).show(); e.printStackTrace(); } 

замещать

 new GregorianCalendar(d.getYear(), d.getMonth(), d.getDay(), d.getHours(), d.getMinutes()); 

с

 new GregorianCalendar(1900+d.getYear(), d.getMonth(), d.getDay(), d.getHours(), d.getMinutes()); 

Проверьте документацию метода getYear. Он возвращает годы после 1900 года … И вторая причина уже была идентифицирована @Pakspul ..

Вы должны поменять cal1 и cal2 на ваш миллисекундный расчет. Например:

 startdate = 12:00 enddate = 12:01 diff = enddate - startdate; // result is 1 minute diff = startdate - enddate; // result is -1 minute 

То, что вы здесь делаете, это то, что вы вызываете cal2 после cal1, поэтому оно будет иметь более высокое значение, чем cal1, потому что оно имеет наибольшее время, следовательно, отрицательное значение результата.

Просто переключите их и повторите попытку следующим образом:

  Toast.makeText(getApplicationContext(),"Stored date "+d+"\nCurrent date "+cal.getTime()+"\nStored date in ms :"+cal1.getTimeInMillis()+"\nCurrent time in ms :"+cal2.getTimeInMillis()+"\nDifference "+((cal2.getTimeInMillis()-cal1.getTimeInMillis())/1000), Toast.LENGTH_LONG).show(); }