• Apfeltalk ändert einen Teil seiner Allgemeinen Geschäftsbedingungen (AGB), das Löschen von Useraccounts betreffend.
    Näheres könnt Ihr hier nachlesen: AGB-Änderung
  • Was gibt es Schöneres als den Mai draußen in der Natur mit allen Sinnen zu genießen? Lasst uns teilhaben an Euren Erlebnissen und macht mit beim Thema des Monats Da blüht uns was! ---> Klick

Programmaufruf zur vollen Stunde

Daedalus_666

Golden Delicious
Registriert
20.12.08
Beiträge
11
Hi,

ich habe mal wieder ein Problem und google wusste keine funktionierende Antwort (das Orakel von Delphi war irgendwie doch besser).

Ich möchte eine Funktion (die etwas aus dem Web abruft) nachdem sie bei laden das Programms aufgerufen wird immer zur vollen Stunde wieder ausführen lassen. Kein Problem wenn ich das erste mal die volle Stunde habe und dann mit einem Timer und dem Interval 3600 arbeite. Um die Zeit vom Programmaufruf bis zur ersten vollen Stunde zu ermitteln wollte ich das so machen:
double jetzt = [NSDate timeIntervalSinceReferenceDate];
double hour = jetzt/3600;
// Hier sollte hour abgrundet werden was ich auch noch nicht rausgefunden habe
double nextHour = (hour*3600)+3600;
double rest = nextHour-(hour*3600);
double timer = 3600-rest;
NSLog(@"jetzt ist:%d", jetzt);
NSLog(@"hour ist:%d", hour);
NSLog(@"nextHour ist:%d", nextHour);
NSLog(@"rest ist:%d", rest);
NSLog(@"timer ist:%d", timer);
Die Werte lasse ich mir (noch) ausgeben um sie zu kontrollieren. Hier mal die Werte die ich bekommen habe:
jetzt ist:-1131801729
hour ist:138769057
nextHour ist:-594930817
rest ist:0
timer ist:0

Die Werte sind ja offensichtlich nicht richtig und wechseln auch mal in den positiven Bereich. Neben dem sind ja auch die mathematischen Oprationen nicht richtig gelöst.
Könnt ihr mir sagen was ich falsch mache?? Bin noch immer Anfänger und komme grad nicht weiter...
Danke schonmal Daedalus
 

joey23

Hochzeitsapfel
Registriert
26.11.06
Beiträge
9.247
Ich verstehe kein Wort von dem was du da schreibst, aber mit iCal lassen sich Programme und Scripte ausführen, zu definierten Zeiten ;)
 
  • Like
Reaktionen: Tommi

landplage

Admin
AT Administration
Registriert
06.02.05
Beiträge
23.480
Ich hab zwar keinen Schimmer vom Programmieren, glaube aber zu verstehen, was er meint:
Irgendeine Aktion soll immer zur vollen Stunde ausgeführt werden.
Falls schon mal eine Aktion erfolgte, werden einfach 3600 sec. addiert und wieder erfolgt die Aktion.
Das Programm, das die Aktion anschubst, wird aber nicht genau zur vollen Stunde, sondern zu einer beliebigen Zeit, sagen wir 17.23 Uhr gestartet. Wie kann das Programm jetzt ermitteln, wann es 18.00 Uhr ist und das erste mal die Aktion erfolgen soll?

So ist doch die Frage. oder?
 

Daedalus_666

Golden Delicious
Registriert
20.12.08
Beiträge
11
Also ich schreibe ein Programm. Eine Funktion soll immer zur vollen Stunde aufgerufen werden.
Wenn ich mein Programm aufrufe wir die Funktion das erste mal aufgerufen und soll einen NSTimer gesetzt bekommen, dass es die Funktion zur nächsten vollen Stunde wieder ausführen soll. Da ich nicht davon ausgehen kann, dass Menschen mein Prog immer zur vollen Stunde öffnen kann ich den Timer beim ersten mal nicht einfach auf 3600 setzen.
Wie ich rechnerisch auf die restlichen Sekunden bis zur vollen Stunde komme weiß ich in etwa auch.
timeintervalsincereferencedate ist ein Intvals in Sekunden.
Das Interval durch 3600 ergibt die Stunden und die restlichen Sekunden seit der letzten vollen Stunde als Rest. - Mir fällt grad auf, dass ich den Zeitpunkt der nächsten Stunde garnicht brauche ;) - Um auf Sekunden bis zur nächsten Stunde zu kommen muss ich ja nur von 3600 den Rest abziehen und schon kann ich den NSTimer mit dem Interval starten. Nur scheint es ja mit den Werten Probleme zu geben rechnerisch wie generell...
 

below

Purpurroter Cousinot
Registriert
08.10.06
Beiträge
2.858
Klar gibt es Probleme :D

RTF man 3 printf

WAS für ein Argument erwartet %d ?

Alex
 

below

Purpurroter Cousinot
Registriert
08.10.06
Beiträge
2.858
Dann lies mal was zu Format Spezifiers

%d erwartet einen Ganzzahlwert (char, short, int, long etc), einen Double-Wert gibst Du mit %f aus

Alex
 

Daedalus_666

Golden Delicious
Registriert
20.12.08
Beiträge
11
Oh sorry, Mißverständnis. Ich schlug im Manual nach und hatte es schon ;D Aber danke für die nette Hilfe :)
 

below

Purpurroter Cousinot
Registriert
08.10.06
Beiträge
2.858
Sind denn jetzt die Werte das, was Du erwartest? ;)

Alex
 

MacApple

Schöner von Bath
Registriert
05.01.04
Beiträge
3.652
Man könnte die Rechnerei auch dem System überlassen.
Alternativvorschlag:
Code:
NSDate *date = [NSDate dateWithTimeIntervalSinceNow:3600.0];
  // Zeitpunkt jetzt +1h

NSMutableString *dateString = [NSMutableString stringWithString:[NSDate description]];
  // Datum/Uhrzeit in einen String mit dem Format "YYYY-MM-DD HH:MM:SS ±HHMM" wandeln

[dateString replaceCharactersInRange:NSMakeRange(14, 5) withString:@"00:00"];
  // Minuten und Sekunden auf 00 setzen

date = [dateWithString:dateString];
  // Und schon haben wir die nächste volle Stunde als NSDate Instanz
  // und können damit eine NSTimer Instanz erzeugen.
MacApple