2017-02-07 3 views
-1

Ich habe eine Verpflichtung, wenn ich das bestimmte Datum geben, wie zum Beispiel:Woher weiß man, in welcher Woche welcher Monat?

  1. Typ in 2016-02-01 sollte 2016-2-1 zurückkehren, bedeuten 2016-02-01 gehört 2016 Jahren ersten Woche FEBRUAR

  2. Typ in 2016-09-01 sollte 2016-8-5 zurückkehren, bedeutet 2016-09-01 bis 2016 Jahre fünften Woche August gehört.

  3. Wenn 2016-01-01 nicht Montag ist, sollte das Rückkehrjahr 2015-x-x sein.

Achtung, bei es die Formel-Modus von Montag bis Sonntag ist eine Woche. Wie 2016-04, 2016-04-04 ->2016-04-10 ist April erste Woche. 2016-04-01 ->2016-04-03 gehört nicht zu den Aprilwochen, es gehört März.

Ich versuchte mit NSCalendar, aber die Anforderung ist eigenartig, ich habe keine Ahnung, damit umzugehen, also könnte jemand einen Gedankengang dafür bieten?
Vielen Dank im Voraus.


Mein versucht Code:

In meinem Util.m:

+ (NSString *)getCustomMonthAndWeek:(NSString *)formatDateStr { 

    NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; 
    [formatter setDateFormat:@"yyyy-MM-dd"]; 

    NSDate *date= [[NSDate alloc] init]; 
    date = [formatter dateFromString:formatDateStr]; 

    NSCalendar *calen = [[NSCalendar alloc] initWithCalendarIdentifier:NSCalendarIdentifierGregorian]; 

    NSDateComponents *dateCom = [calen components:(NSCalendarUnitYear | NSCalendarUnitMonth |NSCalendarUnitWeekOfMonth | NSCalendarUnitDay | NSCalendarUnitHour | NSCalendarUnitMinute) fromDate:date]; 

    NSString *ret_str = @""; 

    ret_str = [[NSString alloc] initWithFormat:@"%ld-%ld-%@", (long)dateCom.year, (long)dateCom.month, dateCom.weekOfMonth]; 

    return ret_str; 

} 

In meinem VC:

- (void)viewDidLoad { 
    [super viewDidLoad]; 

    NSString *string = [Util getCustomMonthAndWeek:@"2016-04-02"]; // Here prints 2016-4-1, is not my requirement, you see my Attention. 
    NSLog(@"%@", string); 
} 
+0

Können Sie Teilen Sie uns Ihren aktuellen Code oder was auch immer Sie versucht haben? – viral

+0

@iOS App Dev, ich poste meinen Code in meiner Frage, zuerst benutze ich NSCalender, aber ich fand es nicht meine Anforderung. – lme

Antwort

0
NSDate *someDate = // whatever 
NSDate *now = [NSDate date]; 
NSDateComponents *thenComponents = [[NSCalendar currentCalendar] components:NSHourCalendarUnit|NSDayCalendarUnit|NSMonthCalendarUnit|NSYearCalendarUnit fromDate:someDate]; 
NSDateComponents *nowComponents = [[NSCalendar currentCalendar] components:NSHourCalendarUnit|NSDayCalendarUnit|NSMonthCalendarUnit|NSYearCalendarUnit fromDate:now]; 
if([thenComponents year] == [nowComponents year] && [thenComponents month] == [nowComponents month] && [thenComponents day] == [nowComponents day] && [thenComponents hour] == [nowComponents hour]) 

{}

Entfernen Sie die Komponente "Stunde", wenn Sie nur den Tag überprüfen oder beides entfernen möchten, und "Tag" (und ersetzen Sie sie durch NSWeekCalendarUnit und die Methode -week), um die Woche zu überprüfen.

+0

Der Formelmodus ist von Montag bis Sonntag. – lme

1

Wenn Sie NSCalendar als NSDateComponents verwenden, finden Sie das angegebene Datum in welchem ​​Monat, in welcher Woche. verwenden Sie folgenden Code

NSDate *date=[NSDate date]; 

NSCalendar *gregorianCalendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSCalendarIdentifierGregorian]; 

NSDateComponents *dateComponents = [gregorianCalendar components:(NSCalendarUnitYear | NSCalendarUnitMonth |NSCalendarUnitWeekOfMonth | NSCalendarUnitDay | NSCalendarUnitHour | NSCalendarUnitMinute) fromDate:date]; 

Komponenten gibt Ausgang Kalenderjahr: 2017 Monat: 2 Leap Monat: nein Tag: 7 Stunde: 14 Minute: 55 Woche im Monat: 2

+0

Es tut mir leid, Mann, mein Test ist Ihr Gedankengang, aber Sie schauen auf meinen Code, und wenn ich @ 2016-04-02 "eingeben, wird es' 2016-4-1' drucken, aber es sollte '2016-03-weekOf03' sein. Siehe meine Anforderung. – lme

+0

formatDateStr ist eine Zeichenfolge –

+0

Sie sehen meine Aufmerksamkeit und meinen VC-Code. Der Code meines Utils ist ähnlich wie deine Antwort, ich habe deutlich gemacht, dass der NSCalendar meiner Frage in meinem Post nicht passt, also warte ich die Antwort noch ab. – lme

Verwandte Themen