eigene uhrzeit in einer java applikation führen

  • Themenstarter Themenstarter Guest
  • Beginndatum Beginndatum
Status
Nicht offen für weitere Antworten.
G

Guest

Gast
hy
ich sollte in meiner java applikation eine eigene uhrzeit führen.
wie würdet ihr das machen? ich brauche eine völlig unabhängige uhrzeit, welche ich verstellen kann etc.

herzlichen dank
andreas
 
Was willst/meinst du bitte???


Drück dich mal verständlich aus, dann kann man dir auch helfen...


Soweit ich dich verstehe, willst du ein Programm indem du mehrer Uhrzeiten (von dir selbst definiert) ablaufen lassen kannst...


Mit Date kannst sowieso sagen ab wann du dieses Objekt initialilsieren willst (zB jetzt oder gestern, oder morgen)

Dann baust du dir einen Timer, der alle Sekunden/millsekunden bei deiner Uhr die jeweilige Uhr dazuzählt!

Guck dir java.util.Date an
SimpleDateFormat zum Formatieren
und java.util.Timer und java.util.TimerTask
 
was soll ich da noch verständlicher sagen?
ich brauche eine eigene uhrzeit in meiner applikation.
diese muss unabhängig sein von der systemzeit, damit der user die uhrzeit selbst einstellen kann.

ich werde es mal mit dem date, timer und timer task probieren.
herzlichen dank
grüsse
 
Code:
GregorianCalendar cal = new GregorianCalendar(int jahr, int monat, int tag, int stunde, int minute, int sekunde) // 0 = Januar, 11 = Dezember
System.out.println(cal.get(Calendar.YEAR));
System.out.println((cal.get(Calendar.MONTH) + 1));
System.out.println(cal.cet(Calendar.DAY_OF_MONTH));
... and so on

Automatisch aktualisieren tut sich diese Methode allerdings nicht, das musst du selbst machen.

Grundsätzlich solltest du dir mal die Klasse GregorianCalendar statt date anschauen, da Date veraltet ist :bae: :wink: .
 
also, meinst du mit aktualisieren die sekunden dazuzählen, damit das Gergorian Calendar Objekt immer die richtige zeit hat?
grüsse
 
Hobbit_Im_Blutrausch hat gesagt.:
Automatisch aktualisieren tut sich diese Methode allerdings nicht, das musst du selbst machen.

Dazu brauchst Du nur einen Timer und eine TimerTask, die einmal pro Sekunde dies macht:
Code:
cal.roll( Calendar.SECOND, true );

Geht auch pro Milli.....
 
habe ich das richtig verstanden, dass wenn ich die sekunden selber zähle, dass ich dann auch die minuten selber raufzählen muss, die stunden selber raufzählen muss etc.?

vielen dank
grüsse
 
hmm, bei mir scheint das nicht zu funktionieren. die sekunden werden raufgezählt..doch die minutenzahl bleibt stehen?!
ich habe es folgendermassen gemacht:

Code:
private Timer timer;
private GregorianCalendar cal;
private TimerTask timerTask = new TimerTask(){
    /**
     * run
     */
    public void run() {
      cal.roll(Calendar.SECOND, true );
      System.out.println("plus eine Sekunde");

    }
  };

public GuiTime getActuallyTime(){

    System.out.println(cal.get(Calendar.YEAR));
    System.out.println((cal.get(Calendar.MONTH) + 1));
    System.out.println(cal.get(Calendar.DAY_OF_MONTH));
    System.out.println(cal.get(Calendar.HOUR));
    System.out.println(cal.get(Calendar.MINUTE));
    System.out.println(cal.get(Calendar.SECOND));


    str_GuiTime.year = cal.get(Calendar.YEAR);
    str_GuiTime.mon = cal.get(Calendar.MONTH);
    str_GuiTime.day = cal.get(Calendar.DAY_OF_MONTH);
    str_GuiTime.hour = cal.get(Calendar.HOUR);
    str_GuiTime.min = cal.get(Calendar.MINUTE);
    str_GuiTime.sec = cal.get(Calendar.SECOND);

    return str_GuiTime;
  }


  public void startTimer(){
    timer.schedule(timerTask, 0, 1000L);
  }

  public void cancelTimer(){
    timer.cancel();
  }

am anfang rufe ich von einer anderen klasse die methode startTimer() auf.

dann rufe ich in regelmässigen abständen die methode getActuallyTime() auf. Das Objekt str_GuiTime ist eine eigen definierte Struktur welche jahr, monat, tag, stunde,minuten und sekunde speichert.
 
die lösung mit dem timer ist doch nur dann nötig, wenn auf der GUI ständig eine laufende uhr sichtbar sein soll

sonst würde ich das anders machen:

nimm die systemzeit, holst dir die ticks als long

und speichere einen offset (+ - long, zum vorstellen oder zurückstellen) für die "anpassung" des users

bei der anzeige zählst du den offset dann dazu oder ziehst in ab??
 
Hab mich noch net mit Timer beschäftigt, aber ich hab sowas ähnliches mal so gemacht:

1. neuer Thread
2. Differenz zwischen der "User-Zeit" und der wirklichen Zeit ausrechnen
3. endlos Schleife
4. neuer GregorianCalendar mit der wirklichen Zeit
5. vom neuen GregorianCalendar die Differenz abziehen
6. aus dem Ergebnis ein neues Datum generieren
7. dieses Anzeigen
8. den Thread für ne Sekunde schlafen legen
 
würde ich auf jedem Fall so machen, also

Timer + Differenz + jedesmal neu ausrechnen

Wenn du nur einen Timer nimmst, der selber eine Zeit hochzählen soll, dann wird das irgendwann auseinanderlaufen...
 
ok, ich werde es so einmal porbieren.
nun habe ich eine frage:

der user kann die zeit ja selber setzen:
dazu übergibt er dem server die selber definierte struktur MBTime, welche folgende Felder besitzt:

- year
- month
- day
- hour
- min
- sec

und ich habe eine MBTime struktur im server, welche die aktuelle zeit enthält.
wie würdet ihr nun am besten vorgehen, um die differenz auszurechnen?

also z.B übergibt der user folgende struktur:
2006
10
11
14
30
15

also 10.11.2006 14:30:15

und im server habe ich folgende struktur

2005
9
4
10
30
20

also 9.4.2005 10:30:20
 
Code:
GregorianCalendar user = new GregorianCalendar(die ganzen Daten);
GregorianCalendar akt = new GregorianCalendar(die anderen aktuellen Daten);
long differenz = akt.getTimeInMillis() - user.getTimeInMillis();

damit hast du die Zeitdifferenz in Millisekunden
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Zurück
Oben