IOS 获取农历方法

声明:以下为使用IOS的 NSChineseCalendar 网上之前发现有人说这个方法不是完全准确,有些日期会显示的不对,本人没有验证过,也实在懒得用C++那套方法去实现。

另外我做的不过是个简单的功能,还不包括什么节气 节日那些复杂有高端的功能,如果哪位大神不吝赐教 小弟在此感激了。

方法总的说来就这样:

[cpp] view plaincopyprint?
+(NSString*)getChineseCalendarWithDate:(NSDate *)date{

NSArray *chineseYears = [NSArray arrayWithObjects:  
                   @"甲子", @"乙丑", @"丙寅", @"丁卯",  @"戊辰",  @"己巳",  @"庚午",  @"辛未",  @"壬申",  @"癸酉",  
                   @"甲戌",   @"乙亥",  @"丙子",  @"丁丑", @"戊寅",   @"己卯",  @"庚辰",  @"辛己",  @"壬午",  @"癸未",  
                   @"甲申",   @"乙酉",  @"丙戌",  @"丁亥",  @"戊子",  @"己丑",  @"庚寅",  @"辛卯",  @"壬辰",  @"癸巳",  
                   @"甲午",   @"乙未",  @"丙申",  @"丁酉",  @"戊戌",  @"己亥",  @"庚子",  @"辛丑",  @"壬寅",  @"癸丑",  
                   @"甲辰",   @"乙巳",  @"丙午",  @"丁未",  @"戊申",  @"己酉",  @"庚戌",  @"辛亥",  @"壬子",  @"癸丑",  
                   @"甲寅",   @"乙卯",  @"丙辰",  @"丁巳",  @"戊午",  @"己未",  @"庚申",  @"辛酉",  @"壬戌",  @"癸亥", nil];  

NSArray *chineseMonths=[NSArray arrayWithObjects:  
                    @"正月", @"二月", @"三月", @"四月", @"五月", @"六月", @"七月", @"八月",   
                    @"九月", @"十月", @"冬月", @"腊月", nil];  


NSArray *chineseDays=[NSArray arrayWithObjects:  
                  @"初一", @"初二", @"初三", @"初四", @"初五", @"初六", @"初七", @"初八", @"初九", @"初十",   
                  @"十一", @"十二", @"十三", @"十四", @"十五", @"十六", @"十七", @"十八", @"十九", @"二十",  
                  @"廿一", @"廿二", @"廿三", @"廿四", @"廿五", @"廿六", @"廿七", @"廿八", @"廿九", @"三十",  nil];  


NSCalendar *localeCalendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSChineseCalendar];  

unsigned unitFlags = NSYearCalendarUnit | NSMonthCalendarUnit |  NSDayCalendarUnit;  

NSDateComponents *localeComp = [localeCalendar components:unitFlags fromDate:date];  

NSLog(@"%d_%d_%d  %@",localeComp.year,localeComp.month,localeComp.day, localeComp.date);  

NSString *y_str = [chineseYears objectAtIndex:localeComp.year-1];  
NSString *m_str = [chineseMonths objectAtIndex:localeComp.month-1];  
NSString *d_str = [chineseDays objectAtIndex:localeComp.day-1];  

NSString *chineseCal_str =[NSString stringWithFormat: @"%@_%@_%@",y_str,m_str,d_str];  

[localeCalendar release];  

return chineseCal_str;  

}

如果需要也可以拆成单独的函数来方便获取,例如获取月份:
[cpp] view plaincopyprint?
+(NSString*)getChineseMonthWithDate:(NSDate *)date{

NSArray *chineseMonths=[NSArray arrayWithObjects:  
                        @"正月", @"二月", @"三月", @"四月", @"五月", @"六月", @"七月", @"八月",   
                        @"九月", @"十月", @"冬月", @"腊月", nil];  


NSCalendar *localeCalendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSChineseCalendar];  

unsigned unitFlags = NSYearCalendarUnit | NSMonthCalendarUnit |  NSDayCalendarUnit;  

NSDateComponents *localeComp = [localeCalendar components:unitFlags fromDate:date];  

//NSLog(@"%d_%d_%d  %@",localeComp.year,localeComp.month,localeComp.day, localeComp.date);  

NSString *m_str = [chineseMonths objectAtIndex:localeComp.month-1];  

[localeCalendar release];  

return m_str;  

}

另外如果不知道如何获取NSDate 那么额外加个方法用来根据string和format来得到对应的 NSDate:

[cpp] view plaincopyprint?
+(NSDate )getDateWithDateString:(NSString )strDate formatString:(NSString*)strFormat{

NSDateFormatter *formatter = [[[NSDateFormatter alloc] init] autorelease];   

NSTimeZone *timeZone =  [NSTimeZone timeZoneWithAbbreviation:@"GMT"];   

//NSTimeZone *localTime = [NSTimeZone localTimeZone];    

[formatter setTimeZone:timeZone];    
[formatter setDateFormat : strFormat];        

NSDate *dateTime = [formatter dateFromString:strDate];  

return dateTime;  

}

使用方法类似这样,比如获取世界末日那一时刻的Date~~~
[cpp] view plaincopyprint?
NSDate *date = [Tool_Functions getDateWithDateString:@”2012-12-21 15:14:35”
formatString:@”yyyy-MM-dd HH:mm:ss”];

转载请标明来自:http://blog.csdn.net/zhao_yin/article/details/7244958

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值