2011-01-10 92 views

回答

13

有一個方便的類叫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使用公曆日期,但至少它得到了正確的月份名稱,對不對?

編輯

其實,我瘋玩。如果您只設置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 

好多了!是不是可可真棒?

+2

提斯利月是民用年的第一個月(而不是教會年),所以看起來它只是解釋2011-01-09爲希伯來語日期。可能不是一個好主意,去提取日期組件的第一個例子。第二個例子是正確的,2011年1月9日是Sh'vat的第四個,5771. – dreamlax 2011-01-10 07:47:42