Nieprawidłowe obliczanie róznicy dat

0

W następujący sposób próbuje wyświetlić różnicę czasu pomiędzy dwoma datami:

Date data1 = new Date();
			Date data2 = new Date(2011, 12, 21, 23, 32, 10);

			minut = (Math.abs( data2.getTime() - data1.getTime()) / 1000 * 60  );
			sekund = (minut * 60) - (Math.abs( data2.getTime() - data1.getTime()) / 1000 );

Na uruchomionym androidzie po wskazaniu, żeby wyświetlił datę, uzyskuje (2011-12-21 2117).
Tak więc różnica to ponad 1 godzina.

A wyniki jakie uzyskuje to:
minut - 999347136 (około)
sekundy liczy prawidłowo tylko, że z minusem ale wystarczy pomnożyć przez -1 gdy jest sekund < 0

Nie zależy mi na obliczaniu różnic dat tylko godzin!

Dlaczego nie prawidłowo mi oblicza?

Moje dane wejściowe:
data1 - pobrana z androida
data2 - hhss

0
  1. Używasz kostruktora, który jest aktualnie oznaczony, jako deprecated, ale jeśli już go używasz, warto zapoznać się z domumentacją:

Parameters:
year - the year minus 1900.
month - the month between 0-11.
date - the day of the month between 1-31.
hrs - the hours between 0-23.
min - the minutes between 0-59.
sec - the seconds between 0-59.

Aktualnie Twój date2, to: Sun Jan 21 2310 CET 3912

  1. Przy obliczaniu minut najpierw podzielisz przez 1000, a potem pomnożysz przez 60. Zastosuj nawiasy
0

Próby obliczenia czasu inną metodą też nie przynoszą efektu:

Calendar thatDay = Calendar.getInstance();
			thatDay.set(Calendar.HOUR, 22);
			thatDay.set(Calendar.PM, 1);
			thatDay.set(Calendar.MINUTE, 40);
			thatDay.set(Calendar.SECOND, 10);

			Calendar today = Calendar.getInstance();

			long diff = thatDay.getTimeInMillis() - today.getTimeInMillis();
			
			long minut = diff / (60 * 1000);

Dostaje liczby milionowo ujemne :)

0

Co chciałeś ustawić tą linia:

thatDay.set(Calendar.PM, 1);

Bo jedyne, co ustawiles, to rok na 1. Calendar.PM to nie jest identyfikator pola w obiekcie kalendarza, tylko jedna z możliwych do przypisania wartości dla pola Calendar.AM_PM

Nie wiem, jak to wyglada na androidzie, ale czy tak trudno debugować kod, jeśli dostajesz kosmiczne wyniki? Nawet "dupa debugging" by Ciebie poratował. Wystarczyło wstawić linijkę typu:

System.out.println(String.format("%1$tY-%1$tm-%1$td", thatDay));
0

Niestety nie ma takiej konsoli wyjściowej przy programowaniu na Androida :(
Jakoś sobie poradziłem.

1 użytkowników online, w tym zalogowanych: 0, gości: 1