Есть удобный класс с именем NSCalendar
.Вы создаете такой как:
NSCalendar * gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
NSCalendar * hebrew = [[NSCalendar alloc] initWithCalendarIdentifier:NSHebrewCalendar];
Как только у вас есть объекты календаря, вы можете использовать их для преобразования даты в различные представления:
NSDate * date = [NSDate date];
NSDateComponents * components = [gregorian components:NSUIntegerMax fromDate:date];
NSDate * hebrewDate = [hebrew dateFromComponents:components];
NSLog(@"date: %@", date);
NSLog(@"hebrew: %@", hebrewDate);
На моем компьютере,это журналы:
date: 2011-01-09 23:20:39 -0800
hebrew: 1751-09-25 23:20:39 -0800
Если вы хотите преобразовать материал в более читаемый формат, вы используете NSDateFormatter
:
NSDateFormatter * formatter = [[NSDateFormatter alloc] init];
[formatter setDateStyle:NSDateFormatterLongStyle];
[formatter setTimeStyle:NSDateFormatterNoStyle];
[formatter setCalendar:gregorian]; //this is usually unnecessary; it's here for clarity
NSLog(@"date: %@", [formatter stringFromDate:date]);
[formatter setCalendar:hebrew];
NSLog(@"hebrew: %@", [formatter stringFromDate:hebrewDate]);
[formatter release];
Этот журнал:
date: January 9, 2011
hebrew: Tishri 9, 2011
Может показаться, что NSDateFormatter
использует григорианскую дату, но, по крайней мере, у него правильное название месяца, верно?
edit
На самом деле я обманываю.Если вы просто установите календарь NSDateFormatter
, вам не нужно беспокоиться о преобразовании даты вообще.См .:
NSDateFormatter * formatter = [[NSDateFormatter alloc] init];
[formatter setDateStyle:NSDateFormatterLongStyle];
[formatter setTimeStyle:NSDateFormatterNoStyle];
[formatter setCalendar:hebrew];
NSLog(@"hebrew: %@", [formatter stringFromDate:[NSDate date]]);
[formatter release];
Это журналы:
hebrew: Shevat 4, 5771
Намного лучше!Какао не круто?