NSDate - Изменение значения года
Мне нужно изменить объект NSDate. То, что я в основном делаю, это изменение значения года.
например:
NSString *someYear = @"2093";
NSDate *date = [NSDate date]; // Gets the current date.
... Create a new date based upon 'date' but with specified year value.
Таким образом, возвращая 'date' 2011-03-06 22:17:50 +0000 от init, я бы хотел создать дату с 2093-03-06 22:17:50 +0000.
Однако я хотел бы, чтобы это было как можно более культурно нейтральным, чтобы оно работало независимо от часового пояса.
Благодарю.
4 ответа
Решение
Взгляни на NSCalendar
, особенно components:fromDate:
а также dateFromComponents:
методы.
Вот мой код для установки пределов UIDatePicker для выбора даты рождения. Максимальный разрешенный возраст - 100 лет
_dateOfBirth.maximumDate = [NSDate date];
//To limit the datepicker year to current year -100
NSDate *currentDate = [NSDate date];
NSUInteger componentFlags = NSYearCalendarUnit;
NSDateComponents *components = [[NSCalendar currentCalendar] components:componentFlags fromDate:currentDate];
NSInteger year = [components year];
NSLog(@"year = %d",year);
[components setYear:-100];
NSDate *minDate = [[NSCalendar currentCalendar] dateByAddingComponents:components toDate:currentDate options:0];
_dateOfBirth.minimumDate = minDate;
Начиная с iOS 8 вы можете установить определенный компонент даты. Например:
date = [calendar dateBySettingUnit:NSCalendarUnitYear value:year ofDate:date options:0];
Мне удалось выяснить ответ с указателем, который дал мне Хоха.
NSNumber *newYear = [[NSNumber alloc] initWithInt:[message intValue]];
NSCalendar* gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
unsigned int unitFlags = NSYearCalendarUnit | NSDayCalendarUnit | NSMonthCalendarUnit;
NSDateComponents* dateComponents = [gregorian components:unitFlags fromDate:[NSDate date]];
[dateComponents setYear:[newYear intValue]];
NSDate *newDate = [gregorian dateFromComponents:dateComponents];
[newYear release];