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.
SimpleDateFormat format =newSimpleDateFormat("HH:mm:ss SSS");GregorianCalendar calender =newGregorianCalendar();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(newDate(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.