獲取農曆方法

聲明:以下爲使用IOS的 NSChineseCalendar 網上之前發現有人說這個方法不是完全準確,有些日期會顯示的不對,本人沒有驗證過,也實在懶得用C++那套方法去實現。


另外我做的不過是個簡單的功能,還不包括什麼節氣 節日那些複雜有高端的功能,如果哪位大神不吝賜教 小弟在此感激了。


方法總的說來就這樣: 


  1. +(NSString*)getChineseCalendarWithDate:(NSDate *)date{  
  2.   
  3.     NSArray *chineseYears = [NSArray arrayWithObjects:  
  4.                        @"甲子", @"乙丑", @"丙寅", @"丁卯",  @"戊辰",  @"己巳",  @"庚午",  @"辛未",  @"壬申",  @"癸酉",  
  5.                        @"甲戌",   @"乙亥",  @"丙子",  @"丁丑", @"戊寅",   @"己卯",  @"庚辰",  @"辛己",  @"壬午",  @"癸未",  
  6.                        @"甲申",   @"乙酉",  @"丙戌",  @"丁亥",  @"戊子",  @"己丑",  @"庚寅",  @"辛卯",  @"壬辰",  @"癸巳",  
  7.                        @"甲午",   @"乙未",  @"丙申",  @"丁酉",  @"戊戌",  @"己亥",  @"庚子",  @"辛丑",  @"壬寅",  @"癸丑",  
  8.                        @"甲辰",   @"乙巳",  @"丙午",  @"丁未",  @"戊申",  @"己酉",  @"庚戌",  @"辛亥",  @"壬子",  @"癸丑",  
  9.                        @"甲寅",   @"乙卯",  @"丙辰",  @"丁巳",  @"戊午",  @"己未",  @"庚申",  @"辛酉",  @"壬戌",  @"癸亥", nil];  
  10.       
  11.     NSArray *chineseMonths=[NSArray arrayWithObjects:  
  12.                         @"正月", @"二月", @"三月", @"四月", @"五月", @"六月", @"七月", @"八月",   
  13.                         @"九月", @"十月", @"冬月", @"臘月", nil];  
  14.       
  15.       
  16.     NSArray *chineseDays=[NSArray arrayWithObjects:  
  17.                       @"初一", @"初二", @"初三", @"初四", @"初五", @"初六", @"初七", @"初八", @"初九", @"初十",   
  18.                       @"十一", @"十二", @"十三", @"十四", @"十五", @"十六", @"十七", @"十八", @"十九", @"二十",  
  19.                       @"廿一", @"廿二", @"廿三", @"廿四", @"廿五", @"廿六", @"廿七", @"廿八", @"廿九", @"三十",  nil];  
  20.       
  21.       
  22.     NSCalendar *localeCalendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSChineseCalendar];  
  23.       
  24.     unsigned unitFlags = NSYearCalendarUnit | NSMonthCalendarUnit |  NSDayCalendarUnit;  
  25.   
  26.     NSDateComponents *localeComp = [localeCalendar components:unitFlags fromDate:date];  
  27.       
  28.     NSLog(@"%d_%d_%d  %@",localeComp.year,localeComp.month,localeComp.day, localeComp.date);  
  29.       
  30.     NSString *y_str = [chineseYears objectAtIndex:localeComp.year-1];  
  31.     NSString *m_str = [chineseMonths objectAtIndex:localeComp.month-1];  
  32.     NSString *d_str = [chineseDays objectAtIndex:localeComp.day-1];  
  33.   
  34.     NSString *chineseCal_str =[NSString stringWithFormat: @"%@_%@_%@",y_str,m_str,d_str];  
  35.       
  36.     [localeCalendar release];  
  37.       
  38.     return chineseCal_str;  
  39. }  



如果需要也可以拆成單獨的函數來方便獲取,例如獲取月份:

  1. +(NSString*)getChineseMonthWithDate:(NSDate *)date{  
  2.       
  3.     NSArray *chineseMonths=[NSArray arrayWithObjects:  
  4.                             @"正月", @"二月", @"三月", @"四月", @"五月", @"六月", @"七月", @"八月",   
  5.                             @"九月", @"十月", @"冬月", @"臘月", nil];  
  6.       
  7.       
  8.     NSCalendar *localeCalendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSChineseCalendar];  
  9.       
  10.     unsigned unitFlags = NSYearCalendarUnit | NSMonthCalendarUnit |  NSDayCalendarUnit;  
  11.       
  12.     NSDateComponents *localeComp = [localeCalendar components:unitFlags fromDate:date];  
  13.       
  14.     //NSLog(@"%d_%d_%d  %@",localeComp.year,localeComp.month,localeComp.day, localeComp.date);  
  15.   
  16.     NSString *m_str = [chineseMonths objectAtIndex:localeComp.month-1];  
  17.       
  18.     [localeCalendar release];  
  19.       
  20.     return m_str;  
  21.   
  22. }  



另外如果不知道如何獲取NSDate 那麼額外加個方法用來根據string和format來得到對應的 NSDate:


  1. +(NSDate *)getDateWithDateString:(NSString *)strDate formatString:(NSString*)strFormat{  
  2.       
  3.     NSDateFormatter *formatter = [[[NSDateFormatter alloc] init] autorelease];   
  4.       
  5.     NSTimeZone *timeZone =  [NSTimeZone timeZoneWithAbbreviation:@"GMT"];   
  6.       
  7.     //NSTimeZone *localTime = [NSTimeZone localTimeZone];    
  8.       
  9.     [formatter setTimeZone:timeZone];    
  10.     [formatter setDateFormat : strFormat];        
  11.       
  12.     NSDate *dateTime = [formatter dateFromString:strDate];  
  13.       
  14.     return dateTime;  
  15. }  

使用方法類似這樣,比如獲取世界末日那一時刻的Date~~~

  1. NSDate *date = [Tool_Functions getDateWithDateString:@"2012-12-21 15:14:35"   
  2.                                             formatString:@"yyyy-MM-dd HH:mm:ss"];  


轉載請標明來自:http://blog.csdn.net/zhao_yin/article/details/7244958

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章