Frage

Dies ist etwas seltsam, aber ist es möglich, einen NSCalendar (oder eine Komponente) zu verwenden, um herauszufinden, wie das Datum des nächsten "ersten Dienstags des Monats" sein würde?

Zum Beispiel ist heute Donnerstag, 25. März 2010. Der nächste "erste Dienstag im Monat" wäre am 6. April. Auch wenn ich nach dem nächsten "ersten Dienstag im Monat" am 1. April suchen würde, wäre es immer noch am 6. April.

Wie würdest du das machen?

Vielen Dank!!!!!

War es hilfreich?

Lösung

Der folgende Code berechnet den ersten Dienstag einer bestimmten Monats-/Jahr -Kombination. Es ist geschrieben in Makruby Denn das ist es, womit ich es gerade versucht habe, aber Sie sollten keine Probleme haben, es in das richtige Objektiv-C zu konvertieren, es ist nur eine andere Syntax (ich liebe Makruby, dass er schnell eine Idee ausprobiert hat):

dc = NSDateComponents.alloc.init
# Set month to April 2010
dc.setYear 2010
dc.setMonth 4

dc.setWeekday 3 # 1 = Sunday, 2 = Monday, ...
dc.setWeekdayOrdinal 1 # We want the first weekday of the month

cal = NSCalendar.alloc.initWithCalendarIdentifier NSGregorianCalendar
date = cal.dateFromComponents dc
date.description # => "2010-04-06 00:00:00 +0200"

Ich überlasse es Ihnen, den "nächsten ersten Dienstag" aus einem bestimmten Datum zu bestimmen: Tun Sie es zuerst für den Monat des aktuellen Datums und falls das Ergebnis in der Vergangenheit vorliegt, es für den folgenden Monat erneut. Verwenden -[NSCalendar components:fromDate:] um die Monats-/Tag -Kombination eines bestimmten NSDate zu bekommen.

Andere Tipps

Leider kann ich die Unfähigkeit dieses Code nicht überprüfen, aber einige sollten so aussehen:

NSDateComponents *components = [[NSDateComponents alloc] init];
[components setWeekday:2]; // Monday
[components setMonth:5]; // May
[components setYear:2008];
[components setWeekdayOrdinal:1]
NSCalendar *gregorian = [[NSCalendar alloc]
                         initWithCalendarIdentifier:NSGregorianCalendar];
NSDate *date = [gregorian dateFromComponents:components];

Für Beispiele und Detailinformationen finden Sie dies führen

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top