# formatierung und übergabe von Date elementen als Long



## kaoZ (19. Sep 2013)

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 ? 






```
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 (19. Sep 2013)

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 ,


```
elapsed = breakEnd - breakStart;
elapsedList.add(elapsed);
```

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

[/EDIT]


----------



## kaoZ (20. Sep 2013)

wenn ich auf folgende weise formatiere 


```
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 (20. Sep 2013)

```
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


----------



## dzim (23. Sep 2013)

Du wunderst dich ehrlich, das dies hier 

```
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:


```
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 (24. Sep 2013)

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


```
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


----------

