IOS 获取农历方法


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


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


方法总的说来就这样: 


+(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;
}



如果需要也可以拆成单独的函数来方便获取,例如获取月份:

+(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:


+(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~~~

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




猜你喜欢

转载自blog.csdn.net/zhao_yin/article/details/7244958
今日推荐