formatierung und übergabe von Date elementen als Long

kaoZ

Top Contributor
Hab hier mal wieder ein kleines Problem , die Ausgabe soll nur die Differenz zwischen den beiden Zeiten sein , aber irgendwie schmeißt er mir wenn ich denn Long wert zu einem String konvertiere immer folgenede Ausgabe raus :


19:00:xx

wo um alles in der welt holt er die "19" her ? der durch die rechnung und die arraylist errechnete wert stimmt , aber warum die 19 ?? systemzeit kann es auch nicht sein , da laut system die uhrzeit 12 uhr beträgt, jemand eine Idee ?





Java:
SimpleDateFormat f = new SimpleDateFormat("HH:mm:ss");
....

		if(btnBreak.isPressed()&& index ==1)
		{
			breakStart= new Date().getTime();
			btnBreak.setBackgroundResource(R.drawable.weiterbutton);
			index++;
			return;
		}
	
		if(btnBreak.isPressed()&& index ==2)
		{
			breakEnd = new Date().getTime();
			btnBreak.setBackgroundResource(R.drawable.pausebutton);
		}
	
		elapsed = breakEnd - breakStart;
		elapsedList.add(elapsed);
		for(long a : elapsedList)
		{
			elapsedTime += a;
		}
		txtElapsedTime.setText(String.valueOf(f.format(elapsedTime)));
		index=1;
		return;
	}
 

kaoZ

Top Contributor
im prinzip hole mich mir doch nur bei jedem buttonklick je eine startzeit und eine endzeit

und errechne die differenz dazwischen in long und gebe sie formatiert aus, ich hab keinen plan wo der die 19 stunden her bekommt o0:lol:

[EDIT]
ich habe mal die werte die geTimestampt werden ausgeben lassen




breakStart : 14:00:12 ( Stimmt mit der Systemzeit überein ! )

breakEnd : 14:00:16 ( bei 4 sek pause also auch korrekt )

elapsed : 19:00:04 ( normalerweise soll in long elapsed die differenz von breakEnd - breakStart gespeichert werden , und diese dann in die ArrayList eingetragen werden ,

Java:
elapsed = breakEnd - breakStart;
elapsedList.add(elapsed);

woher bekommt der denn die 19 Stunden o0 , die zeiten die geloggt werden passen ja ????

[/EDIT]
 
Zuletzt bearbeitet:

kaoZ

Top Contributor
wenn ich auf folgende weise formatiere

Java:
	seconds = (int) elapsedTime / 1000 % 60;
	minutes = (int) elapsedTime / (1000*60) % 60;
	hours = (int) elapsedTime / (1000 * 60 * 60) % 24;

 txtV.setText(String.valueOf(hours + ":" + minutes + ":" + seconds));

erhalte ich zwar die richtige ausgabe also sprich 4 sekunden ( die dauer zwischen den button klicks) allerdings in folgendem format

0:0:4

wie bekomme ich es a. hin das es folgender maßen formatiert wird 00:00:04
und b. möchte ich letztendlich die dauer zwischen einer startzeit und einer endzeit ermitteln und die "pausenzeit" die über diesen button ermittelt wird abziehen , die werte liegen in long für start und endzeit vor und in int für die pausenzeit

jemand einen lösungsvorschlag ?
 

turtle

Top Contributor
Java:
		int hours = 0;
		int minutes = 0;
		int seconds = 4;
		String line = String.format("%02d:%02d:%02d", hours, minutes , sec);
		System.out.println(line);

00:00:04
 
Zuletzt bearbeitet:

dzim

Top Contributor
Du wunderst dich ehrlich, das dies hier
Java:
String.valueOf(hours + ":" + minutes + ":" + seconds)
deine obere Ausgabe ergeben hat? Ok...

Ich mache solche Zeitdifferenzen lieber via API - hier wäre dann Java8 (Developer Preview) mit dem ThreeTen Projekt ganz praktisch, wenn man aber wie ich auf Java7 festgenagelt ist, kann man es auch über die Calendar-API hinbekommen:

Java:
long breakStart = System.currentTimeMillis();
/*
 * [...] do something
 */
long breakEnd = System.currentTimeMillis();
long elapsed = breakEnd - breakStart;
Calendar c = Calendar.getInstance(); // using the current locale
c.setTimeInMillis(elapsed);
DateFormat df = new SimpleDateFormat("HH:mm:ss");
String time = df.format(c.getTime());
System.err.println(time);

Ohne es zu testen sollte es aber was vernünftiges ausspucken. Vor allem bei Tagesdifferenzen ist mir diese (zugegeben immer noch irgendwie blöde) Variante lieber.
 

kaoZ

Top Contributor
Danke, da mich erst seit ca einem halben Jahr mit Java und der Programmierung unter Android beschäftige , steh ich quasi noch ziemlich am Anfang was die Programmierung angeht wenn es etwas tiefer in die Materie geht,

gelöst habe ich das Problem jetzt (in einer hier etwas vereinfachten version dargestellt) über

Java:
private long breakStart;
private String ausgabe;

......

breakStart = new Date().getTime();

seconds = breakStart / 1000 &60;
minutes  = breakStart / (1000 * 60) %60;
hours = breakStart / (1000*60*60) %24;

ausgabe = String.format("%02d:%02d:%02d", hours, minutes, seconds);

txtTime.setText(ausgabe);

klappt so auch wunderbat :)
 

Neue Themen


Oben