Ende des Tages in Java berechen.

simplo

Mitglied
Hallo,
ich möchte ein Programm schreiben, das mir den Tagende in Millisseconds und als normal Date anzeigt.
ich habe wie unten beschrieben versucht aber es lauft nicht, ich bekomme immer die aktuelle Uhrzeit als Tagende. Kann mir bitte jemand sagen was ich falsch mache ?
Außerdem wollte ich ein Code schreiben das genau am Tagende den Wert einer variable ändert und kann mich nicht zwischen Thread oder Timer entscheiden, was ist den die bessere alternative zwischen den beiden ?

Danke

Code:
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

public class Test {

	public static void main(String[] args) {
		
		    	
		    	Calendar cal  = Calendar.getInstance();
		    	Date time = cal.getTime();
		    	DateFormat formatter = new SimpleDateFormat( "dd_MM_yyyy" );
		    	//System.out.println( formatter.format( time ) ); // 26.04.10 18:11
		    	System.out.println( time); // 26.04.10 18:11
		    	
		    	
		    	
		    	
		    	
		    	    long zeitPunkt = time.getTime();
		            long bisMitternacht = 86400000 -(zeitPunkt % 86400000) - 3600000 ; //GMT
		            
		            Calendar zeitpunkt = Calendar.getInstance();
		            zeitpunkt.setTimeInMillis(zeitPunkt);
		            if (zeitpunkt.getTimeZone().inDaylightTime(zeitpunkt.getTime())){
		                bisMitternacht -= 3600000; // Sommerzeit
		            }
		            
		            System.out.println("Tag ende: "+(zeitPunkt + bisMitternacht)); // in milliseconds
		            
		            
		            //Calendar calendar = Calendar.getInstance();
		            Date     time2 = zeitpunkt.getTime();
		            DateFormat formatter2 = new SimpleDateFormat();
		            zeitpunkt.setTimeInMillis(+zeitPunkt + bisMitternacht);
		            System.out.println("Tag Ende "+formatter2.format(time2)); 

		              
		            }
		    

	

}
 
über
String date =DateFormat.getDateTimeInstance().format( new Date());
bekommst du den Tag und die uhrzeit mit hh:mm:ss

zieh aus diesem String die uhrzeit raus und zieh von 24:00:00 bzw. 23:59:59 die aktuelle uhrzeit ab
so erhälst du die verbleibende zeit bis zum tagesende.

jetzt kannst du es noch in milisec umrechnen
 
Auch eine Möglichkeit wäre folgende:

Java:
		SimpleDateFormat format = new SimpleDateFormat("HH:mm:ss SSS");

		GregorianCalendar calender = new GregorianCalendar();
		System.out.println("current date: " + format.format(calender.getTime()));

		int ms = 999 - calender.get(GregorianCalendar.MILLISECOND);
		int s = 59 - calender.get(GregorianCalendar.SECOND);
		int m = 59 - calender.get(GregorianCalendar.MINUTE);
		int h = 22 - calender.get(GregorianCalendar.HOUR_OF_DAY);

		int timeToPass = ms + (s * 1000) + (m * 1000 * 60) + (h * 1000 * 60 * 60);

		System.out.println("timeToPass: " + format.format(new Date(timeToPass)));
 
Danke für eure Antworten. Ich habe eine Annotation von Spring auf meine methode benutzt ( @Scheduled (0 0 * * * * )) um die methode um 0h00 auszuführen.
Das is der Grund weshalb ich das ende des Tages berechnen wollte.

Danke
 

Zurück
Oben