Liegt das Datum in einem Zeitraum von Tag + x Tage?

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Liegt das Datum in einem Zeitraum von Tag + x Tage?

    Hallo,

    ich habe ein Termin1 mit einem Datum, sagen wir dem 17. März 2015, in einer bestimmten Location. Auf diesen Termin folgen weitere Termine (Termin1 + n) am selben Ort in den nächsten x Tagen. da die XML nicht hergibt, dass diese Termine eigentlich zusammen gehören, muss ich das zusammenlegen übernehmen. Ich würde nun gerne prüfen, ob Termin_N im Zeitraum [Termin1 + x Tage] liegt.

    Wie lässt sich das am besten umsetzen? ich stehe grad leicht auf dem schlauch...

    Grüße,

    Daniel
    Man kann alles schaffen. Man muss es nur wollen ;)
    www.regetskcob.github.io
  • du hast ja 3 daten.
    1. beginn
    2. ende
    3. den wert den du überpfügen willst.

    also erstelle dir den beginn (mit 0:0:00 als zeit) und das ende (mit 23:59:59) dann kannst du mittels NSDate prüfen ob das datum zwischen den zwei renzwerten liegt.

    natürlich kannst du die NSDates auch über naturallanguage erstellen, musst dann aber strings zusammenbauen etc. da könntest halt als alternative NSDateComponents verwenden.

    edit: wenn du einen offset in tagen hast, musst du nur das erste datum erstellen, das end-datum kannst du dann berechnen lassen (dateByAddingComponents: toDate: options:)
  • gritsch schrieb:

    du hast ja 3 daten.
    1. beginn
    2. ende
    3. den wert den du überpfügen willst.

    also erstelle dir den beginn (mit 0:0:00 als zeit) und das ende (mit 23:59:59) dann kannst du mittels NSDate prüfen ob das datum zwischen den zwei renzwerten liegt.

    natürlich kannst du die NSDates auch über naturallanguage erstellen, musst dann aber strings zusammenbauen etc. da könntest halt als alternative NSDateComponents verwenden.


    Danke, das war der gesuchte anstoß.... das problem war die Endzeit...
    Man kann alles schaffen. Man muss es nur wollen ;)
    www.regetskcob.github.io
  • DanielBocksteger95 schrieb:

    gritsch schrieb:

    du hast ja 3 daten.
    1. beginn
    2. ende
    3. den wert den du überpfügen willst.

    also erstelle dir den beginn (mit 0:0:00 als zeit) und das ende (mit 23:59:59) dann kannst du mittels NSDate prüfen ob das datum zwischen den zwei renzwerten liegt.

    natürlich kannst du die NSDates auch über naturallanguage erstellen, musst dann aber strings zusammenbauen etc. da könntest halt als alternative NSDateComponents verwenden.


    Danke, das war der gesuchte anstoß.... das problem war die Endzeit...


    zuer endzeit habe ich oben noch einen edit eingefügt. den gabs noch nicht als du gepostet hast!
  • Alternativ via [NSDate -timeIntervalSinceDate:] den Unterschied der beiden Daten als Sekunden abfragen und Vermutungen anstellen, ob die Menge der Sekunden kleinergleich der Anzahl der Tage ist.

    Dürfte gefühlt etwas schneller gehen als mit den NSDateComponents zu hantieren (zumindest beim Implementieren +g+).

    Der Ansatz mit dem TimeInterval ist aber natürlich alles Andere als genau – oder unkomfortabel sehr genau, je nach Betrachtungswinkel:
    Wenn ein Termin am 17.03. um 12 Uhr ist und die Spanne 5 Tage beträgt, würde ein Termin am 22.03. um 11:55 gefunden, ein Termin am 22.03 um 12:05 hingegen nicht mehr.

    Sobald Du dann anfängst mit dem Datum zu hantieren, um es künstlich auf das Ende des Tages aufzublähen, lohnt sich schon der Einsatz der NSDateComponents.
    «Applejack» "Don't you use your fancy mathematics to muddle the issue!"

    Iä-86! Iä-64! Awavauatsh fthagn!

    kmr schrieb:

    Ach, Du bist auch so ein leichtgläubiger Zeitgenosse, der alles glaubt, was irgendwelche Typen vor sich hin brabbeln. :-P
  • Marco Feltmann schrieb:

    Alternativ via [NSDate -timeIntervalSinceDate:] den Unterschied der beiden Daten als Sekunden abfragen und Vermutungen anstellen, ob die Menge der Sekunden kleinergleich der Anzahl der Tage ist.

    Dürfte gefühlt etwas schneller gehen als mit den NSDateComponents zu hantieren (zumindest beim Implementieren +g+).

    Der Ansatz mit dem TimeInterval ist aber natürlich alles Andere als genau – oder unkomfortabel sehr genau, je nach Betrachtungswinkel:
    Wenn ein Termin am 17.03. um 12 Uhr ist und die Spanne 5 Tage beträgt, würde ein Termin am 22.03. um 11:55 gefunden, ein Termin am 22.03 um 12:05 hingegen nicht mehr.

    Sobald Du dann anfängst mit dem Datum zu hantieren, um es künstlich auf das Ende des Tages aufzublähen, lohnt sich schon der Einsatz der NSDateComponents.


    bloß nicht! man denke an DST!
  • Ein Tag ist ein Tag. Stunde mehr oder weniger macht da erst mal nix.
    Erstens wird es dadurch nicht genauer, zweitens hat man innerhalb der Referenz eh noch den DST–Hangover und drittens gehört der Mist sowieso abgeschafft.

    Mich interessiert in dem Zusammenhang der Implementierung aber, was mit Terminen passiert, die sich zeitlich überschneiden. ^^
    «Applejack» "Don't you use your fancy mathematics to muddle the issue!"

    Iä-86! Iä-64! Awavauatsh fthagn!

    kmr schrieb:

    Ach, Du bist auch so ein leichtgläubiger Zeitgenosse, der alles glaubt, was irgendwelche Typen vor sich hin brabbeln. :-P
  • Marco Feltmann schrieb:

    Ein Tag ist ein Tag. Stunde mehr oder weniger macht da erst mal nix.
    Erstens wird es dadurch nicht genauer, zweitens hat man innerhalb der Referenz eh noch den DST–Hangover und drittens gehört der Mist sowieso abgeschafft.

    Mich interessiert in dem Zusammenhang der Implementierung aber, was mit Terminen passiert, die sich zeitlich überschneiden. ^^


    nein, eine stunde macht eben den unterschied.
    wenn zb definiert ist dass ein temrin "geburtstag Markus" den "ganzen tag" 29.3.2015 hat, dann ist der plötzlich für dich am 28ten!?
  • Nein. Wie soll das denn gehen?

    Wenn ein Termin "Geburstag Markus" am 29.03.2015 ist, dann informiert mich das Betriebssystem am 29.03.2015, dass Markus heute Geburtstag hat.
    Wenn ich am 26.03.2015 um 01:59 frage, wer in den nächsten drei Tagen Geburtstag hat, dann hat Markus immer noch am 29.03.2015 Geburtstag.
    Auch wenn ich um 02:00 Uhr frage, hat Markus am 29.03.2015 Geburtstag. Ist ja ein ganztägiger Termin.
    Frage ich hingegen am 25.03.2015, dann kann Markus vielleicht innerhalb der nächsten drei Tage (a.k.a. 72 Stunden) Geburtstag haben, vielleicht aber auch nicht.
    Aber egal wie ich es anstelle, er wird niemals am 28.03.2015 Geburtstag haben! (Außer, ich habe mir das falsche Datum eingetragen…)

    So wirklich richtig interessant wäre nur die Frage nach der genauen Geburtsstunde, wenn man Markus auf den Punkt zum 25ten gratulieren möchte.
    Hier grätscht einem dann DST dazwischen, wenn man einfach ne Stunde zu spät ist.

    Allerdings macht man das auch nicht mit einem 'Sag mir in einem Monat, drei Tagen und drei Minuten Bescheid!' sondern mit einem 'Sag mir am 29.03.2015 um 10:26 Bescheid!"
    «Applejack» "Don't you use your fancy mathematics to muddle the issue!"

    Iä-86! Iä-64! Awavauatsh fthagn!

    kmr schrieb:

    Ach, Du bist auch so ein leichtgläubiger Zeitgenosse, der alles glaubt, was irgendwelche Typen vor sich hin brabbeln. :-P
  • Marco Feltmann schrieb:

    Wenn ein Termin "Geburstag Markus" am 29.03.2015 ist, dann informiert mich das Betriebssystem am 29.03.2015, dass Markus heute Geburtstag hat.


    es geht hier nicht ums betriebssystem sondern dass er das datum "29.03.2015" in einer XML hat.
    wenn er nun prüfen will ob am 28ten noch ein anderer termin ist und er einfach 24 stunden zu 28.0.3.2015 0:00:00 hinzuzählt (um den ganzen 28ten zu haben), dann ist er schon im 29ten drin (an dem eben der geburtstag ist).
  • Ist 28.0.3.2015 eine Sternzeit oder sowas?
    Die DST greift erst um 02:00 bzw. 03:00 Uhr nachts.

    Schön, dass Du mir noch einmal die Nachteile mit der Genauigkeit aufzeigst, die ich selbst schon angemerkt habe.
    Das hat in Deinem Beispiel aber überhaupt nichts mit der DST zu tun.
    «Applejack» "Don't you use your fancy mathematics to muddle the issue!"

    Iä-86! Iä-64! Awavauatsh fthagn!

    kmr schrieb:

    Ach, Du bist auch so ein leichtgläubiger Zeitgenosse, der alles glaubt, was irgendwelche Typen vor sich hin brabbeln. :-P
  • Ich mach das folgerndermaßen:

    Quellcode

    1. - (BOOL)isDate:(NSDate *)date withinDays:(NSInteger)days afterDate:(NSDate *)referenceDate {
    2. if ([date isEqualToDate:referenceDate]) {
    3. return YES;
    4. }
    5. if ([[date laterDate:referenceDate] isEqualToDate:referenceDate]) {
    6. return NO;
    7. }
    8. NSCalendar *gregorianCalendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
    9. NSDateComponents *offset = [[NSDateComponents alloc] init];
    10. offset.day = days;
    11. NSDate *lastValidDate = [gregorianCalendar dateByAddingComponents:offset toDate:referenceDate options:0];
    12. if ([[[referenceDate laterDate:date] earlierDate:lastValidDate] isEqualToDate:date]) {
    13. return YES;
    14. }
    15. offset = [gregorianCalendar components:NSCalendarUnitDay fromDate:referenceDate toDate:date options:0];
    16. return offset.day == 0;
    17. }
    Alles anzeigen

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Markus Müller ()