Countdown (Stunden bis Freitag)

Dark Ranger

Erfahrenes Mitglied
Hallo

Ich versuche gerade einen Countdown zu schreiben, der bis Freitag Abend 19:30 Uhr die Stunden runterzählt, allerdings weiß ich nun nicht so recht wie ich die Stunden, Minuten und Sekunden bis Freitag Abend ausgerechnet bekomme!

Hier mein bisheriger Code:
Code:
package countd;
import java.util.*;

public class Count {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Calendar calendar = Calendar.getInstance();
		int hour = 0;
		int minute = 1;
		int second = 30;

		while (hour >= 0) {
			calendar.set(Calendar.HOUR, hour);
			while (minute >= 0) {
				calendar.set(Calendar.MINUTE, minute);
				while (second >= 0) {
					calendar.set(Calendar.SECOND, second);
					System.out.printf("%02d:%02d:%02d\n",calendar.get(calendar.HOUR),calendar.get(calendar.MINUTE),calendar.get(calendar.SECOND));
					try {
						Thread.sleep(1000L);
					} catch(InterruptedException _ex) {}
				second--;
				}
			minute--;
			second = 59;
			}
		hour--;
		minute = 59;
		}
		System.out.println("Bin Da");
	}

}
 
Also am besten benutzt du Joda Time und legst dir ein aktuelles DateTime Objekt an. Dann setzt du halt den Tag und Uhrzeit auf Freitag 19:30. Damit hast du dein Freitags Objekt. Wenn du die Stunden bis Freitag 19:30 haben willst nimmst du ein Aktuelles DateTime Objekt und das vom Freitag und steckst die beide in eine Duration. Die wandelst du mit toPeriod in eine Period um und kannst dann da die Stunden abfragen.
 
Hallo,

das ist vielleicht nicht die beste Lösung, aber es ist mal ein Beispiel wie man es machen könnte.

Java:
import java.util.Calendar;
import java.util.GregorianCalendar;


public class Test {
    public static void main(String[] args)
    {
      double time;
      int sec, min, hour, day, month, year;
      Calendar now = new GregorianCalendar();
      Calendar appoint = new GregorianCalendar(2009,Calendar.JUNE,5,19,30);
      
      time = appoint.getTimeInMillis()-now.getTimeInMillis();
      do{
        
        time = time /1000;
        sec = (int)time%60;
        time = time / 60;
        
        min = (int)time%60;
        time = time / 60;
        
        hour = (int)time%24;
        time = time / 24;
        
        day = (int)time;
        System.out.printf("Tage: %d; Zeit: %d:%d:%d\n",day,hour,min,sec);
        try
        {
          Thread.sleep(1000);
        }
        catch (InterruptedException e)
        {
          e.printStackTrace();
        }
        now = new GregorianCalendar();
        time = appoint.getTimeInMillis()-now.getTimeInMillis();

      }while(time >=0);
    }
}

MFG

zEriX
 
Zuletzt bearbeitet:
Okay, das funktioniert schonmal danke!

Werde auf deinen Code mal weiter aufbauen und mal schauen wie ich es mache dass er immer wieder den nächsten Freitag nimmt wenn der Countdown zuende ist ^^
 
So ich habe da nochmal ne Frage, wie könnte ich es anstellen, dass er immer wieder den nächsten Freitag nimmt, wenn die Zeit abgelaufen ist.

Ich habe erst gedacht ich könnte einfach dann ne Variable für den freitag anlegen und die immer um 7 nach oben zählen, aber dann muss ich ja irgendwann auch den Monat wechseln. Und dadurch muss ich wissen wieviele Tage der Monat hat usw.

Aber vielleicht kennt ja irgendwer eine einfachere Methode wie ich rausfinden kann was der nächste Freitag ist.
 
Hallo,

also ich würde das wie zeja schon gesagt hat auch mit Joda time machen:
Java:
/**
 * 
 */
package de.tutorials;

import org.joda.time.DateTime;
import org.joda.time.Period;

/**
 * @author Tom
 * 
 */
public class CalculateHoursUntilNextFridayExample {

	/**
	 * @param args
	 */
	public static void main(String[] args) throws Exception {
		DateTime today = new DateTime(
				//2007, 5, 11, 19, 30, 0, 1
				);
		DateTime nextFriday1930Candidate = today.weekOfWeekyear().toInterval()
				.getEnd().minusDays(3).withHourOfDay(19).withMinuteOfHour(30);

		DateTime nextFriday1930 = null;
		if (nextFriday1930Candidate.isAfter(today)) {
			nextFriday1930 = nextFriday1930Candidate;
		} else {
			nextFriday1930 = nextFriday1930Candidate.plusWeeks(1);
		}

		System.out.println(today + " " + today.dayOfWeek().getAsText());

		Period period = new Period(today, nextFriday1930);

		System.out.printf("Hours until next friday 19:30: %sd %sh %sm %ss\n",
				period.getDays(), period.getHours(), period.getMinutes(),
				period.getSeconds());
	}
}

Ausgabe:
Code:
2007-05-10T22:12:24.546+02:00 Donnerstag
Hours until next friday 19:30: 0d 21h 17m 35s

Wer heute noch mit dem Java Calendar API arbeitet ist selbst schuld...

Gruß Tom
 

Neue Beiträge

Zurück