格里高利到希伯来语

iPh*_*Dev 3 iphone objective-c gregorian-calendar

如何将格里高利日期转换为等效的希伯来日期?请告诉我这些日历,因为我对这些日历知之甚少.

Dav*_*ong 13

这里有一个方便的课程NSCalendar.你创建一个这样的:

NSCalendar * gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
NSCalendar * hebrew = [[NSCalendar alloc] initWithCalendarIdentifier:NSHebrewCalendar];
Run Code Online (Sandbox Code Playgroud)

获得日历对象后,您可以使用它们将日期转换为各种表示形式:

NSDate * date = [NSDate date];
NSDateComponents * components = [gregorian components:NSUIntegerMax fromDate:date];
NSDate * hebrewDate = [hebrew dateFromComponents:components];

NSLog(@"date: %@", date);
NSLog(@"hebrew: %@", hebrewDate);
Run Code Online (Sandbox Code Playgroud)

在我的机器上,这个日志:

date: 2011-01-09 23:20:39 -0800
hebrew: 1751-09-25 23:20:39 -0800
Run Code Online (Sandbox Code Playgroud)

如果要将内容转换为更易读的格式,请使用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];
Run Code Online (Sandbox Code Playgroud)

这个日志:

date: January 9, 2011
hebrew: Tishri 9, 2011
Run Code Online (Sandbox Code Playgroud)

似乎NSDateFormatter是使用格里高利日期,但至少它有正确的月份名称,对吗?

编辑

实际上,我傻了.如果您只设置日历,则NSDateFormatter无需担心转换日期.看到:

NSDateFormatter * formatter = [[NSDateFormatter alloc] init];
[formatter setDateStyle:NSDateFormatterLongStyle];
[formatter setTimeStyle:NSDateFormatterNoStyle];
[formatter setCalendar:hebrew];

NSLog(@"hebrew: %@", [formatter stringFromDate:[NSDate date]]);
[formatter release];
Run Code Online (Sandbox Code Playgroud)

这个日志:

hebrew: Shevat 4, 5771
Run Code Online (Sandbox Code Playgroud)

好多了!可可不是很棒?

  • Tishrei是公民年的第一个月(与教会年相对),所以看起来它只是将2011-01-09解释为希伯来日期.使用提取日期组件的第一个示例可能不是一个好主意.第二个例子是正确的,2011年1月9日是Sh'vat的第4个,5771. (2认同)