2012-02-20 3 views
3

Je voudrais obtenir un NSString à une date, avec un format de date comme ceci:NSDateFormatter: semaine de l'année et le premier jour de la semaine

MMEEEY ww 

Le problème est pour le « ww », la semaine de l'année. Je dois comparer ce format avec un autre, tiré d'un backoffice. Mais le premier jour de semaine du backoffice est lundi, alors que celui d'iOS est dimanche. Donc, quand c'est dimanche, la chaîne n'est pas la même car la semaine de l'année n'est pas la même.

La question est: Comment forcer NSDateFormatter à utiliser lundi comme premier jour de la semaine?

J'ai essayé de définir la propriété de calendrier de NSDateFormatter avec un calendrier avec la propriété firstWeekday définie sur 2, mais cela ne fonctionne pas.

L'essentiel de ceci:

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

Modifier: le test après la réponse de Noa

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]); 

Résultat:

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 

Répondre

1

Sur la base des tests, la formatter date ne semblent honorer le réglage du calendrier. Peut-être pourriez-vous donner des exemples des dates que vous essayez de mettre en forme, des résultats que vous voulez obtenir et des résultats que vous obtenez.

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]); 

Résultats:

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 

Je ne sais pas si vous voulez 1/1/12 partie de la semaine de 2011 52, mais encore une fois, c'est la raison pour laquelle je demande ce que les résultats que vous voulez.

+0

Merci pour votre réponse. J'ai essayé de faire exactement la même chose mais pour moi, ça ne marche toujours pas ... Je ne comprends pas pourquoi ... Quoi qu'il en soit, nous avons décidé de ne pas utiliser le numéro de la semaine dans le format de la date. Problème étrange. – syfonseq

Questions connexes