次のコードは、year
とweek
が渡されたときの前週の週数を計算します。 目的C NSCalendar dateFromComponentsが週53を処理していない
NSDateComponents *components = [[NSDateComponents alloc] init];
[components setYear:year];
[components setWeek:NSWeekCalendarUnit];
[components setWeekOfYear:(week-1)]; //Get the previous week
[components setWeekday:2]; //Monday
[components setTimeZone:[NSTimeZone timeZoneWithName:@"UTC"]];
NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
NSDate *date = [calendar dateFromComponents:components];
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setDateFormat:@"yyyyww"];
NSString *newRevision = [formatter stringFromDate:date];
は、私は、これは(201052を与える)201101のようなケースを扱ったことに驚きましたが、それは正しく53週ある年を処理しません。たとえば、201601の場合、201153の代わりに201552が返されます(少なくとも201135は
http://en.wikipedia.org/wiki/ISO_week_dateに従って返されます)。
私は何か間違っていますか?私は、入力が正しいことを確認するために追跡しました。
の日付の年を与えます。掘り出した後、 'NSISO8601Calendar'はまだ実装されていません(http://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSLocale_Class/Reference/Reference.html#//を参照)。 apple_ref/occ/cl/NSLocale)。 –