2012-02-20 6 views
3

Я хотел бы получить NSString с даты, с форматом даты, как это:NSDateFormatter: неделя года и первый день недели

MMEEEY ww 

Проблема заключается в «WW», недели года. Мне нужно сравнить этот формат с другим, взятым из backoffice. Но первый будний день backoffice - понедельник, тогда как iOS - воскресенье. Итак, когда в воскресенье, строка не такая, потому что неделя года не то же самое.

Вопрос: Как заставить NSDateFormatter использовать понедельник как первый рабочий день?

Я попытался установить свойство календаря NSDateFormatter с календарем с свойством firstWeekday, равным 2, но он не работает.

Суть этого:

NSCalendar * calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar]; 
calendar.firstWeekday = 2; 
NSDateFormatter * dateFormatter = [[NSDateFormatter alloc] init]; 
dateFormatter.calendar = calendar; 

Edit: тест после ответа Ноа в

NSDateFormatter * dateFormatter = [[NSDateFormatter alloc] init]; 
NSLocale * locale = [[NSLocale alloc] initWithLocaleIdentifier:@"en"]; 
dateFormatter.locale = locale; 
dateFormatter.dateFormat = @"MMEEEY ww"; 

NSDate * date = [NSDate dateWithTimeIntervalSince1970:1330251642]; // next sunday 

NSLog(@"%@ -> %@", date, [dateFormatter stringFromDate:date]); 

NSCalendar * calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar]; 
calendar.firstWeekday = 2; 
dateFormatter.calendar = calendar; 

NSLog(@"%@ -> %@", date, [dateFormatter stringFromDate:date]); 

Результат:

2012-02-24 11:31:27.878 Test[2546:15203] 2012-02-26 10:20:42 +0000 -> 02Sun2012 09 
2012-02-24 11:31:27.880 Test[2546:15203] 2012-02-26 10:20:42 +0000 -> 02Sun2012 09 

ответ

1

Основываясь на некоторых испытаний, дата форматировщик делает похоже, соблюдают настройки календаря. Возможно, вы могли бы привести примеры того, какие даты вы хотите отформатировать, результаты, которые вы хотите, и результаты, которые вы получаете.

NSDateFormatter * df = [[NSDateFormatter alloc] init]; 
[df setDateFormat:@"MMEEEY ww"]; 

NSDate *date; 
date = [NSDate dateWithString:@"2012-01-01 12:00:00 +0000"]; 
NSLog(@"%@ -> %@", date, [df stringFromDate:date]); 

date = [NSDate dateWithString:@"2012-01-02 12:00:00 +0000"]; 
NSLog(@"%@ -> %@", date, [df stringFromDate:date]); 

NSCalendar * calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar]; 
calendar.firstWeekday = 2; 
df.calendar = calendar; 

date = [NSDate dateWithString:@"2012-01-01 12:00:00 +0000"]; 
NSLog(@"%@ -> %@", date, [df stringFromDate:date]); 

date = [NSDate dateWithString:@"2012-01-02 12:00:00 +0000"]; 
NSLog(@"%@ -> %@", date, [df stringFromDate:date]); 

Результаты:

2012-02-22 12:42:17.020 test[68385:207] 2012-01-01 12:00:00 +0000 -> 01Sun2012 01 
2012-02-22 12:42:17.021 test[68385:207] 2012-01-02 12:00:00 +0000 -> 01Mon2012 01 
2012-02-22 12:42:17.022 test[68385:207] 2012-01-01 12:00:00 +0000 -> 01Sun2011 52 
2012-02-22 12:42:17.022 test[68385:207] 2012-01-02 12:00:00 +0000 -> 01Mon2012 01 

Я не уверен, хотите ли вы 1/1/12 части 2011 по 52-ю недели, но опять же, вот почему я и спрашиваю, какие результаты вы хотите.

+0

Спасибо за ваш ответ. Я пытался сделать то же самое, но для меня это все еще не работает ... Не понимаю, почему ... В любом случае мы решили не использовать номер недели в формате даты. Странный вопрос. – syfonseq

Смежные вопросы