# Millisekunden umrechnen



## SebastianK (28. Dez 2007)

abend,

ich habe nun ein programm geschrieben, das einen zeitintervall in millisekunden speichert.
ich möchte nun die millisekunden entsprechend ausgeben lassen.
die ausgabe bereitet mir allerdings probleme.

die millisekunden sollen am ende in "Tagen Stunden:Minuten" ausgegeben werden.
ich hab nur keine ahnung wie ich das von millisekunden aus umrechne.

hoffe mir kann wer helfen.


----------



## Andy85 (28. Dez 2007)

Schau mal hier nach:
http://www.wer-weiss-was.de/theme35/article1038028.html


----------



## L-ectron-X (29. Dez 2007)

Vielleicht geht das auch mit einem einfachen Zweizeiler.


```
import java.text.*;

DateFormat formatter = new SimpleDateFormat("dd 'Tage' HH 'Stunden und' mm 'Minuten'");
System.out.println(formatter.format(new Date(millis)));
```


----------



## SlaterB (29. Dez 2007)

wie kann man sowas ungetestet posten?

1.
Zeitzonenunterschied: Millisekunde 0 ist in Deutschland eine Stunde später als in Greenwich

2.
Tag: Millisekunde 0 ist bereits am Tag 1, nach 24 Stunden ist man am Tag 2

3.
Monat: bei über 30 Tagen ist bald ein Monatswechsel, es werden nur die Tage im aktuellen Monat angezeigt

4.
von wechselnden Anzahl Tagen pro Monat, Schaltjahren, Sommer/ Winterzeit usw. ganz zu schweigen..


----------



## L-ectron-X (30. Dez 2007)

Wie kann man sich über eine halb fertige Lösung aufregen und keinen besseren Vorschlag bringen!?  :bae:


----------



## anfänger15 (30. Dez 2007)

nicht streiten  

Mein Vorschlag:

```
long day = millisec/(24*60*60*1000);
long hour = (millisec % (24*60*60*1000))/(60 * 60 * 1000);
long min = (millisec % (60 * 60 * 1000))/(60*1000);
```
ungetestet!!


----------



## SebastianK (30. Dez 2007)

hmm..irgendwie klappen alle vorschläge nicht 


```
millis = 3000;
			
DecimalFormat format = new DecimalFormat("00");
long day = millis/(24 * 60 * 60 * 1000);
long hour = (millis % (24 * 60 * 60 * 1000))/(60 * 60 * 1000);
long min = (millis % (60 * 60 * 1000))/(60 * 1000);
			
String s = "Tage:" + format.format(day)+ " Stunden:" + format.format(hour)+ " Minuten:" + format.format(min);
String s2= "Tage:"+day + " Stunden:"+hour+" Minuten:"+min;
System.out.println(s); //Ausgabe: Tage:00 Stunden:00 Minuten:00
System.out.println(s2); //Ausgabe: Tage:0 Stunden:0 Minuten:0
			
DateFormat formatter = new SimpleDateFormat("dd 'Tage' HH 'Stunden und' mm 'Minuten'");
System.out.println(formatter.format(new Date(millis))); //Ausgabe: 01 Tage 00 Stunden und 00 Minuten
```


ich hab noch eine rechnung gefunden, die zu funktionieren scheint.

```
long milliseconds = 303328120;
int milli = (int)(milliseconds % 1000);
milliseconds /=1000;
byte sec = (byte)(milliseconds % 60);
milliseconds /=60;
byte min = (byte)(milliseconds % 60);
milliseconds /=60;
byte h = (byte)(milliseconds % 24);
milliseconds /=24;
int d = (int)milliseconds;
System.out.println("Tage: "+d+" Stunden: "+h+" Minuten: "+min+" Sekunden: "+sec + " Millisekunden: "+milli);
```


----------



## SlaterB (30. Dez 2007)

> hmm..irgendwie klappen alle vorschläge nicht 

weil millis = 3000; weniger als eine Minute sind, du Spassvogel 

> ich hab noch eine rechnung gefunden

welche letztlich genau die gleiche ist, aber natürlich schöner

> Wie kann man sich über eine halb fertige Lösung aufregen und keinen besseren Vorschlag bringen!? 

in der ersten Antwort schon umfassend geschehen  :bae:


----------



## SebastianK (30. Dez 2007)

> weil millis = 3000; weniger als eine Minute sind, du Spassvogel


ups...da haste recht 


außer die sache mit 
	
	
	
	





```
DateFormat formatter = new SimpleDateFormat("dd 'Tage' HH 'Stunden und' mm 'Minuten'");
System.out.println(formatter.format(new Date(millis)));
```
diese liefert nen falschen wert.

dann danke an alle für die tipps!
problem gelöst


----------



## Professor Chaos (2. Mrz 2009)

Ich weiß, meine Antwort ist höchst überflüssig, ich hoffe, dafür reißt mir niemand den Kopf ab.^^
Da ich dasselbe Problem wie SebastianK hatte, habe ich eure Lösung übertragen und in eine eigene Klasse gepackt. Vielleicht ist mir das nicht besonders schön gelungen, aber es ist ja auch nur quick-and-dirty, was anderen vielleicht 10 Minuten Arbeit spart.^^

Ich verzichte auf die Angabe von Tagen, da mir das etwas unrealistisch erscheint.


```
/**
 * 
 * In analogy to SimpleDateFormat, this class provides a method
 * to pretty-print the time, given a number of milliseconds 
 *
 */
public class MyTime {

	/* instance variables */
	
	/** milliseconds... */
	private int milliseconds;
	
	/** seconds... */
	private byte seconds;
	
	/** minutes... */
	private byte minutes;
	
	/** hours... */
	private int hours;
	
	

	/* methods */
	
	/**
	 * constructor, sets the time components.
	 */
	public MyTime(long milliseconds){
		this.milliseconds = (int) (milliseconds % 1000);
		milliseconds /=1000;
		
		this.seconds = (byte) (milliseconds % 60);
		milliseconds /=60;
		
		this.minutes = (byte) (milliseconds % 60);
		milliseconds /=60;
		
		this.hours = (int) (milliseconds);
	}

	/**
	 * returns a String, in which the parameters are replaced as follows:<br>
	 * hh -> hours, mm -> minutes, ss -> seconds, SSS -> milliseconds.
	 * @param format the String to modify
	 * @return returns a String representation of the time.
	 */
	public String format(String format){
		String h = this.hours<10 ? "0"+this.hours : ""+this.hours;
		String m = this.minutes<10 ? "0"+this.minutes: ""+this.minutes;
		String s = this.seconds<10 ? "0"+this.seconds: ""+this.seconds;
		String ms;
		if(this.milliseconds<10)
			ms="00"+this.milliseconds;
		else if(this.milliseconds<100)
			ms="0"+this.milliseconds;
		else
			ms=""+this.milliseconds;
		
		return format.replace("hh", h).replace("mm", m).replace("ss", s).replace("SSS", ms);
	}
}
```


----------



## Professor Chaos (2. Mrz 2009)

Professor Chaos hat gesagt.:


> Vielleicht ist mir das nicht besonders schön gelungen, aber es ist ja auch nur quick-and-dirty...



Argh! Ich bemerkte gerade, dass die Funktionsweise von MyTime nicht in Analogie zu SimpleDateFormat ist. Schreibe es gleich mal um...


----------



## SlaterB (2. Mrz 2009)

ein Glück


----------



## Professor Chaos (2. Mrz 2009)

So, noch immer quick-and-dirty, nun aber sinnvoller. Meine obige Lösung war tatsächlich unlogisch, so hätte man ja für jede neue Zeit ein neues Objekt instanziieren müssen, dabei ist die Intuition ja gerade eine Darstellung zu definieren und damit verschiedene Zeiten darzustellen.


```
/**
 * 
 * In analogy to SimpleDateFormat, this class provides a method
 * to pretty-print the time, given a number of milliseconds 
 *
 */
public class MyTime {

	/* instance variables */
	
	/**
	 * holds the systematic of how to display the time,
	 * for example mm:ss
	 */
	private String format;
	


	/* methods */
	
	/**
	 * constructor. sets the systematic of how to display the time. 
	 * @param format this String encodes how to display the time. it
	 * can be any String, where some substrings get replaced by their 'meanings'.<br>
	 * hh -> hours<br>
	 * mm -> minutes<br>
	 * ss -> seconds<br>
	 * SSS -> milliseconds<br>
	 */
	public MyTime(String format){
		this.format = format;
	}
	
	/**
	 * formats the given time according to the MyTime object.
	 * @param timeInMilliseconds the time to format.
	 * @return the formatted time.
	 */
	public String format(long timeInMilliseconds){
		
		int milliseconds = (int) (timeInMilliseconds % 1000);
		timeInMilliseconds /=1000;
		
		byte seconds = (byte) (timeInMilliseconds % 60);
		timeInMilliseconds /=60;
		
		byte minutes = (byte) (timeInMilliseconds % 60);
		timeInMilliseconds /=60;
		
		int hours = (int) (timeInMilliseconds);
		
		String h = hours<10 ? "0"+hours : ""+hours;
		String m = minutes<10 ? "0"+minutes: ""+minutes;
		String s = seconds<10 ? "0"+seconds: ""+seconds;
		String ms;
		if(milliseconds<10)
			ms="00"+milliseconds;
		else if(milliseconds<100)
			ms="0"+milliseconds;
		else
			ms=""+milliseconds;
		
		return format.replace("hh", h).replace("mm", m).replace("ss", s).replace("SSS", ms);
	}
}
```


----------

