scheduleAtFixedRate

Status
Nicht offen für weitere Antworten.
G

Guest

Gast
Hallo,

möchte gerne zu einer bestimmten Zeit eines Tages (14 Uhr) ein Ereignis auslösen. Dazu habe ich die Methode scheduleAtFixedRate() der Klasse TimerTask ins Auge gefasst. Leider habe ich aber keine Ahnung wie das zu lösen sein soll. Für Experten wird wahrscheinlich in der nächsten Zeile die ich einfüge alles zu sehen sein. Für mich leider nicht. Wie kann ich 14Uhr einsetzen in firstTime?
Code:
public void scheduleAtFixedRate(TimerTask task, Date firstTime, long period)

Danke
Erwin
 

Sky

Top Contributor
zum Beispiel so:
Code:
    GregorianCalendar cal = new GregorianCalendar(2005, Calendar.OCTOBER, 25, 14, 0, 0);
    Date d = cal.getTime();
 
G

Guest

Gast
Danke Sky,

in deinem Beispiel findet das Ereignis jeden 25.Oktober um 14 Uhr statt!?
Ich möchte aber egal an welchen Tag um 14Uhr ein Ereignis auslösen. Dabei soll 14Uhr von aussen deklariert werden können.
Könnte das dann so funktionieren?

Code:
  private DateFormat df = new SimpleDateFormat("HH-mm-ss");
  firstTime =  df.format(new java.util.Date(14-00-00));

Danke
Erwin
 

Sky

Top Contributor
Wenn Du parsen willst, so geht das so:
Code:
    DateFormat df = new SimpleDateFormat( "HH-mm-ss" );
    Date firstTime = df.parse( "14-00-00" );

Ergebnis ist dann aber "Thu Jan 01 14:00:00 CET 1970"
 

Sky

Top Contributor
Nachtrag:

So bekommste glaub ich, was Du willst:
Code:
    // Wenn die gewünschte Uhrzeit bereits vorbei ist, musss
    // der Tag um ein hoch gezählt werden
    // -> Alternative wäre 'sofort' starten 
    int currentHour = cal.get(Calendar.HOUR);
    if ( currentHour >= newHour ) {
      cal.add(Calendar.DAY_OF_MONTH,1);
    }
    // Zeit auf gewünschte Stunde:00:00 setzen
    cal.set(Calendar.HOUR, newHour);
    cal.set(Calendar.MINUTE, 0);
    cal.set(Calendar.SECOND, 0);
    
    Date firstTime = cal.getTime();
 

thE_29

Top Contributor
???

Was hat das ganze mit dem zum tun was er wil...


Der Timer nimmt bei scheduledRate sowieso nur als 1 Paramter ein Datum..

Danach kommt ein long Wert von millisekunden!

Also du machst es so

Code:
public static final long DAY = 3600 * 24 * 1000; //stunde mal 24 mal 1000 = milliseks

       public void setTimer(int year, int month, int hour, int minute, int second)
       {
         GregorianCalendar cal = new GregorianCalendar(year,month,hour,minute,second);
         Date tmp = new java.util.Date(System.currentTimeMillis());
         java.util.Timer timer = new java.util.Timer();
         if(cal.before(tmp))
         {
           timer.scheduleAtFixedRate(new TimerTask(){
             public void run()
             {
               ;
             }
           },0,DAY);
         }
         else
         {
           tmp = new Date(cal.getTimeInMillis());
           timer.scheduleAtFixedRate(new TimerTask()
           {
             public void run()
             {
               ;
             }
           }, tmp, DAY);
         }           
       }
}


Nachtrag:

ohne Jahr/Monatsangabe geht das vielleicht so

GregorianCalendar cal = new GregorianCalendar(Calendar.YEAR,Calendar.MONTH,hour,minute,second);
 

thE_29

Top Contributor
Nachtrag2: wenn das Limit schon überschritten ist, kannst du das nicht mit 1 Timer so hinbekommen, das er dir wirklich immer um die Uhrzeit dann das macht...

Weil wenn die Grenze = 14

Und du startest um 16, so müsste die 2te Zeit bis morgen nur 22 Stunden sein.. aber am nächsten Tag sind es halt wieder 24 Stunden...
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen

Ähnliche Java Themen


Oben