# jede Stunde Methode ausführen



## 27sharp (9. Dez 2014)

Hallo, ich habe eine Methode geschrieben, die von einer Website Daten liest.
So nun möchte ich, das es nur jede Stunde ausgeführt wird.
Ich habe schon etwas über timer gelesen aber so richtig weiß ich es noch nicht.

Kann mir da einer weiterhelfen?
Es sollte möglichst Ressourcen sparend sein, da es auf einem Raspberry Pi laufen wird.


----------



## stg (9. Dez 2014)

Quartz Scheduler |


----------



## 27sharp (9. Dez 2014)

stg hat gesagt.:


> Quartz Scheduler |



Hey danke aber kannst du mir vielleicht ein kleines Beispiel geben für eine Stunde?


----------



## jeegeek (10. Dez 2014)

Am einfachsten wäre es wenn du java.util.Date nutzt. Dort bekommst du die aktuelle Zeit, speicherst diese in einer Variable ab und lässt z.B einen Timer regelmäßig prüfen ob die aktuelle Zeit = alte Zeit + 1 Stunde ist. Das sollte problemlos umgesetzt werden können.

Einige Beispiele und ANregungen gibt es hier: Galileo Computing :: Java ist auch eine Insel – 15 Raum und Zeit wenn du dieses Kapitel durchgelesen hast solltest du dein Problem selbstständig lösen können und hast einiges gelernt. Durch vorgefertigte Lösungen kommt man leider nicht sehr weit. Wenn dann doch noch Fragen offen sind melde dich einfach.


----------



## Flown (10. Dez 2014)

Oder selbst sowas schreiben?


```
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.ScheduledFuture;
import java.util.concurrent.TimeUnit;

public class Scheduler {
  public static void main(String... args) {
    Scheduler s = new Scheduler();
    s.schedule(() -> System.out.println(DateTimeFormatter.ISO_LOCAL_TIME.format(LocalDateTime.now())), 0, 3, TimeUnit.SECONDS);
    try {
      TimeUnit.SECONDS.sleep(15);
    } catch (InterruptedException e) {
      e.printStackTrace();
    }
    s.shutdown();
  }
  
  private ScheduledExecutorService executor;
  private ScheduledFuture<?> task;
  
  public Scheduler() {
    executor = Executors.newSingleThreadScheduledExecutor();
  }
  
  public void schedule(Runnable r, long delay, long period, TimeUnit unit) {
    if (task == null) {
      task = executor.scheduleAtFixedRate(r, delay, period, unit);
    }
  }
  
  public void stop() {
    if (task != null) {
      task.cancel(true);
      task = null;
    }
  }
  
  public void shutdown() {
    stop();
    executor.shutdown();
  }
}
```

In deinem Fall eben TimeUnit.HOURS.


----------



## VfL_Freak (10. Dez 2014)

Moin,



jeegeek hat gesagt.:


> Am einfachsten wäre es wenn du java.util.Date nutzt


Also diese Klasse sollten man ruhigen Gewissens eher nicht mehr empfehlen, da der Großteil inzwischen _depricated_ ist (Date (Java Platform SE 7 ))

Nutze besser die Library *JODA-Time* (Joda-Time - Home)!
Die ist auch recht simpel und weniger fehleranfällig !

Gruß
Klaus


----------



## arilou (16. Dez 2014)

jeegeek hat gesagt.:


> Am einfachsten wäre es wenn du java.util.Date nutzt. Dort bekommst du die aktuelle Zeit, speicherst diese in einer Variable ab und lässt z.B einen Timer regelmäßig prüfen ob die aktuelle Zeit = alte Zeit + 1 Stunde ist.


Ähm, also wenn man schon mit einem Timer arbeitet, dann kann man den auch gleich jede Stunde die Aktion ausführen lassen, anstatt _nochmal_ auf einen Zeitablauf zu prüfen. Das ist doppelt gemoppelt, und somit Murks.



Flown hat gesagt.:


> Oder selbst sowas schreiben?
> [ellenlanges Java-Programm]


Und das soll eine kurze, einfache Lösung sein? Ein kompletter Scheduler, nur um "1* pro Stunde" genau eine spezielle Tätigkeit durchzuführen? Da erschrecken ja die Spatzen zu tode vor lauter Kanonen...


----------



## 27sharp (17. Dez 2014)

VfL_Freak hat gesagt.:


> Moin,
> 
> 
> Also diese Klasse sollten man ruhigen Gewissens eher nicht mehr empfehlen, da der Großteil inzwischen _depricated_ ist (Date (Java Platform SE 7 ))
> ...



Kannst du mir vielleicht ein Beispiel zeigen, weil mit der doc komme ich noch nicht ganz zu recht.


----------



## VfL_Freak (17. Dez 2014)

Moin,


27sharp hat gesagt.:


> Kannst du mir vielleicht ein Beispiel zeigen, weil mit der doc komme ich noch nicht ganz zu recht.


Ist Google kaputt??
Dazu gibt es doch Dutzende von Seiten im Web ..... 

etwa
Javabeginners - Datums-Differenz berechnen

Gruß
Klaus


----------

