4

次のような日付形式で、日付から NSString を取得したいと思います。

MMEEEY ww

問題は、年の週を表す「ww」です。この形式を、バックオフィスから取得した別の形式と比較する必要があります。しかし、バックオフィスの最初の平日は月曜日ですが、iOS の最初の平日は日曜日です。したがって、日曜日の場合、その年の週が同じではないため、文字列は同じではありません。

問題は 、NSDateFormatter に月曜日を最初の平日として強制的に使用させる方法です。

firstWeekday プロパティを 2 に設定したカレンダーで NSDateFormatter の calendar プロパティを設定しようとしましたが、うまくいきません。

これの要点:

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
4

1 に答える 1

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

2011 年の第 52 週の 1/1/12 の部分が必要かどうかはわかりませんが、繰り返しになりますが、そのため、どのような結果が必要かを尋ねています。

于 2012-02-22T17:49:18.013 に答える