NSDate aus einem DayString

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

  • NSDate aus einem DayString

    Hallo Leute,

    ich habe z.B. "Montag" oder "Monday" oder in anderen Sprachen.

    Aus diesem Tag möchte ich dann ein NSDate, damit ich dann abgleichen kann ob heute dieser Tag ist.

    Sprich:

    Quellcode

    1. NSDate *currentDate = [NSDate date]
    2. NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
    3. formatter.dateFormat = @"eeee";
    4. NSDate *day = [formatter dateFromString: @"Montag"];
    5. if([day isEqualToDate: currentDate]) { ... }


    "day" ist aber leider immer nil.

    Wie löse ich das am Besten?

    Danke & Grüße
    Every language has an optimization operator. In ObjC that operator is ‘//’.

    golbros.de
  • also mit isequalToDate sicher nicht denn da muss der tag und jahr und zeit stimmen. du gibst jedoch nur einen wochentag an.

    du kannst dir ein datum mittels dateWithNaturalLanguageString: (eventuell noch mit locale) erstellen lassen, dann fragst du dort den wochentag ab (NSDateComponents) ebenso beim heutigen tag und diese kannst du dann vergleichen.
  • Ich würde es umgekehrt angehen: Berechne Dir zu den sieben Tagen der Woche jeweils ein Datumsobjekt. Aus den Datumsobjekten kannst Du über den Dateformatter den jeweiligen Wochentag in jeder beliebigen Sprache ermitteln und mit der Eingabe vergleichen.

    BTW: Zwei NSDate-Objekte auf Gleichheit zu prüfen, liefert in der Regel nicht das erwartete Ergebnis.
    „Meine Komplikation hatte eine Komplikation.“
  • Welches Datum der jeweilige Tag hat, ist mir relativ egal. Ich brauche nur den aktuellen Tag.

    Das ich dies über NSDatesvergleich lösen wollte, liegt daran, dass wenn ich jetzt Englische Sprache habe und den Tag speichere wäre es ja "Monday", stelle ich sie wieder auf Deutsch um und vergleich nachher, vergleiche ich ja "Monday" mit "Montag". Dachte dies kann man trotz, dass man kein Datum hat in NSDate packen...
    Every language has an optimization operator. In ObjC that operator is ‘//’.

    golbros.de
  • Fortrackz schrieb:

    Welches Datum der jeweilige Tag hat, ist mir relativ egal. Ich brauche nur den aktuellen Tag.

    Das ich dies über NSDatesvergleich lösen wollte, liegt daran, dass wenn ich jetzt Englische Sprache habe und den Tag speichere wäre es ja "Monday", stelle ich sie wieder auf Deutsch um und vergleich nachher, vergleiche ich ja "Monday" mit "Montag". Dachte dies kann man trotz, dass man kein Datum hat in NSDate packen...


    du sollst auch keine wochentage als strings speichern und schon gar nicht lokalisiert.
    speichere diese als ganzzahl (0 - 6, also sonntag bis samstag oder eben montag bis sonntag - steht dir ja frei).

    edit: verwende 1-7 als sonntag bis samstag dann hast du die gleichen werte wie weekday von NSDateComponents (umindest für den gregorianischen kalender)
  • Ich möchte natürlich den Wochentag. Am besten natürlich so : Montag = 0, Dienstag = 1. Wenn Montag = 1, Dienstag = 2, wäre ja auch nicht schlimm.

    Verstehe aber nun nicht warum -1 für components.weekDay kommt. Wenn heute Dienstag ist.

    Habe es jetzt so gelöst:

    Quellcode

    1. NSInteger currentDay = (components.day % 7)
    Every language has an optimization operator. In ObjC that operator is ‘//’.

    golbros.de
  • Fortrackz schrieb:

    Ich möchte natürlich den Wochentag. Am besten natürlich so : Montag = 0, Dienstag = 1. Wenn Montag = 1, Dienstag = 2, wäre ja auch nicht schlimm.

    Verstehe aber nun nicht warum -1 für components.weekDay kommt. Wenn heute Dienstag ist.

    Habe es jetzt so gelöst:

    Quellcode

    1. NSInteger currentDay = (components.day % 7)


    nochmal: DU MUSST DICH ENTSCHEIDEN.

    mit "day" holst du dir den tag im monat (heute also den 22ten). das mod 7 gibt dir natürlich KEINEN SINNVOLLEN wert!

    du musst dir "weekday" holen!

    in der doku steht sonntag = 1 bis samstag = 7, aber das "umzurechnen" sollte ja kein problem sein!?
  • weekday gibt mir aber -1. Dienstag wäre ja dann 3.

    So mache ich es im Moment:

    Quellcode

    1. NSDate *now = [NSDate date];
    2. NSCalendar *calendar = [NSCalendar currentCalendar];
    3. NSDateComponents *components = [calendar components:NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit fromDate:now];
    4. NSLog(@"%d", components.weekDay); //-1


    Edit:

    ok man sollte auch die richtigen COmponents angeben..

    Quellcode

    1. NSDateComponents *components = [calendar components:NSWeekCalendarUnit fromDate:now];

    Every language has an optimization operator. In ObjC that operator is ‘//’.

    golbros.de

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Fortrackz ()