NSDateFormatter: неделя года и первый день недели - PullRequest
4 голосов
/ 20 февраля 2012

Я хотел бы получить NSString из даты с таким форматом даты:

MMEEEY ww

Проблема в 'ww', неделе года. Я должен сравнить этот формат с другим, взятым из бэк-офиса. Но первый рабочий день backoffice - понедельник, а iOS - воскресенье. Поэтому, когда наступает воскресенье, строка не совпадает, потому что неделя года не совпадает.

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

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

Суть этого:

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

Редактировать : тест после ответа Ноа

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 Ответ

1 голос
/ 22 февраля 2012

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

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 часть 52-й недели 2011 года, но опять же, поэтому я спрашиваю, каких результатов вы хотите.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...