2013-07-11 9 views
6

ich die Kalenderwoche des Jahres von der date.I zu bekommen versucht, den Code wie folgt aber gibt mir eine falsche Woche Zahl.Holen Sie sich das Wochennummer in iOS SDK

Mein Code für Woche Nummer:

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; 
    [dateFormatter setDateFormat:@"YYYY-MM-dd"]; 
    NSDate *date = [dateFormatter dateFromString:@"2012-09-15"]; 


    NSCalendar *calendar = [NSCalendar currentCalendar]; 

    NSLog(@"week: %i", [[calendar components: NSWeekOfYearCalendarUnit fromDate:date] weekOfYear]); //Display 38 instead of 37 
} 

Hinweis: Wenn ich mit mit [NSDate date] Anzeige versuche die richtigen.

Hilf mir, dieses Problem zu lösen .. Danke,

+0

siehe meine Antwort http: // stackoverflow.com/questions/17403761/get-the-day-from-the-date-in-ios-sdk/17403855#17403855 –

+2

Es gibt verschiedene Definitionen für die Wochennummer eines Datums. Ich denke, das ist die wahrscheinlichste Ursache für Ihr Problem. Siehe http://en.wikipedia.org/wiki/Calendar_week#Week_numbering für Details. – Treb

+0

@ SAMIRRATHOD, Danke für Ihre Antwort ... es zeigt nur über die Woche Tag nicht für die Wochennummer. – user2526811

Antwort

17

ObjectiveC:

NSCalendar *calendar = [NSCalendar currentCalendar]; 
NSDateComponents *dateComponent = [calendar components:(NSWeekOfYearCalendarUnit | NSDayCalendarUnit | NSMonthCalendarUnit | NSYearCalendarUnit) fromDate:[NSDate date]]; 
NSLog(@"%@",dateComponent); 

Swift:

let calendar = NSCalendar.currentCalendar() 
let dateComponent = calendar.components([.WeekOfYear, .Day, .Month, .Year], fromDate: NSDate(timeIntervalSinceNow: 0)) 
print("weekOfYear \(dateComponent.weekOfYear)") 

Swift 3:

let component = Calendar.current.component(.weekOfYear, from: Date()) 
print("Week of Year \(component)") 
+0

Danke für Ihre Antwort .. Aber wenn ich versuche, das Datum von String zu geben, wie oben zu sehen ist, gibt es die falsche Wochennummer. – user2526811

+0

Gebrauch NSDateComponents –

+0

** Vielen Dank für Ihre Antwort !!!!! ** – user2526811

11

[NSCalendar currentCalendar] gi Sie haben einen Gregorianischen Kalender als Standard. Sie können

NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSISO8601Calendar]; 

verwenden, um ein ISO 08601 konform Kalender zu erhalten, die Wochennummer für Ihren Termin hat.

+0

leid, aber für die '2012-09-25', es gibt _38 statt 39_. ** Was läuft da falsch jetzt ** – user2526811

+0

Versuch in der ersten Woche des Kalenders auf den richtigen Wert einstellen (ich weiß nicht, was ..) mit - (void) setFirstWeekday: (NSUInteger) Wochentag – AlexVogel

+0

Ich habe die Lösung . – user2526811

0

Swift 3: Sie müssen letzte Date des ausgewählten Monats wissen. Als Prüfnummer der Woche für diese Woche, und dies der Anzahl der Wochen im Monat

return Calendar.current.component(.weekOfMonth, from: lastDate ?? Date()) 
0

Aktualisiert Code in Objective verwendet Xcode-Version sein wird - 9.1 -:

NSCalendar *calendar = [NSCalendar currentCalendar]; 
    NSDateComponents *dateComponent = [calendar components:(NSCalendarUnitWeekOfYear | NSCalendarUnitDay | NSCalendarUnitMonth | NSCalendarUnitYear) fromDate:[NSDate date]]; 
    NSLog(@"%ld",(long)[dateComponent weekOfYear]); 
Verwandte Themen