iOS - acquisition date, the Gregorian calendar (Gregorian calendar) the date of the Lunar method of system time

 

//获取当前时间
    NSDate *now = [NSDate date];
    NSLog(@" now date is: %@ ",now);
    
    NSCalendar *calendar = [NSCalendar currentCalendar];
    NSUInteger unitFlags = NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit | NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit;
    NSDateComponents *dateComponent = [calendar components:unitFlags fromDate:now];
    
    int year = [dateComponent year];
    int month = [dateComponent month];
    int day = [dateComponent day];
    int hour = [dateComponent hour];
    int minute = [dateComponent minute];
    int second = [dateComponent second];
    
    NSLog(@" year is: %d ",year);
    NSLog(@" month is: %d ",month);
    NSLog(@" day is: %d ",day);
    NSLog(@" hour is: %d ",hour);
    NSLog(@" minute is: %d ",minute);
    NSLog(@" second is: %d ",second);

 

* = DateTime NSString [Self LunarForSolarYear: Month year: month The Day: Day]; 

// lunar transfer function 
- (NSString *) :( LunarForSolarYear int ) :( wCurYear Month int ) wCurMonth Day: (NSInteger) wCurDay {
     // lunar date name 
    NSArray * cDayName = [NSArray arrayWithObjects: @ " * " , @ " started " , @ " two days " , @ " three days " , @ " fourth day " , @ " fifth day " , @ " sixth day " , @ "Seventh day " ,@ " Eighth day " , @ " Ninth " , @ " tenth " , 
                          
                          @ " eleven " , @ " twelve " , @ " thirteen " , @ " fourteen " , @ " fifteen " , @ " sixteen " , @" seventeen " , @" eighteen " , @" nineteen " , @" twenty " , 
                          
                          @"Twenty " , @" Twenty-two . ", @ " Niansan " , @ " twenty-four " , @ " twenty-five " , @ " Nian Liu " , @ " Nianqi " , @ " Nianba " , @ " Eve " , @ " thirty " , nil ];
     // lunar month names 
    NSArray * cMonName = [NSArray arrayWithObjects: @ " * " , @ " positive " , @ " two " , @ " three ",@"", @ " Five " , @ " six " , @ " seven " , @ " eight " , @ " nine " , @ " ten " , @ " eleven " , @ " Prince " , nil];
     // calendar month days preceding 
    const  int wMonthAdd [ 12 is ] = { 0 , 31 is , 59 , 90 , 120 , 151 , 181 , 212 ,243, 273 , 304 , 334 };
     // Lunar data 
    const  int wNongliData [ 100 ] = { 2635 , 333 387 , 1701 , 1748 , 267 701 , 694 , 2391 , 133 423 , 1175 , 396 438 
        
        , 3402 , 3749 , 331 177 , 1453 , 694 , 201 326 , 2350 , 465 197 , 3221 ,3402
        
        ,400202,2901,1386,267611,605,2349,137515,2709,464533,1738
        
        ,2901,330421,1242,2651,199255,1323,529706,3733,1706,398762
        
        ,2741,1206,267438,2647,1318,204070,3477,461653,1386,2413
        
        ,330077,1197,2637,268877,3365,531109,2900,2922,398042,2395
        
        ,1179,267415,2635,661067,1701,1748,398772,2742,2391,330031
        
        ,1175,1611,200010,3749,527717,1452,2742,332397,2350,3222
        
        ,268949,3402,3493,133973,1386,464219,605,2349,334123,2709
        
        ,2890,267946,2773,592565,1210,2651,395863,1323, 2707 , 265 877 }; 
    
    static  int nTheDate, nIsEnd, m, K, n-, I, NBit;
     // calculate the number of days to the initial time February 8, 1921: The 1921-2-8 (first day) 
    nTheDate = ( wCurYear - 1921 ) * 365 + (wCurYear - 1921 ) / . 4 + wCurDay + wMonthAdd [wCurMonth - . 1 ] - 38 is ; 
    
    IF (((wCurYear%! . 4 )) && (wCurMonth> 2 )) 
        nTheDate = nTheDate + . 1 ; 
    
    / / calculated lunar heavenly, branched, month, day 
    nIsEnd = 0 ; 
    m = 0; 
    
    The while (! = NIsEnd . 1 ) {
         IF (wNongliData [m] < 4095 ) 
            K = . 11 ;
         the else 
            K = 12 is ; 
        n = K;
         the while (n> = 0 ) {
             // Get wNongliData (m) of the n-th bit value 
            NBit = wNongliData [m];
             for (I = . 1 ; I <n-+ . 1 ; I ++ ) 
                NBit = NBit / 2 ; 
                NBit= nBit % 2;
            if (nTheDate <= (29 + nBit)) {
                nIsEnd = 1;
                break;
            }
            nTheDate = nTheDate - 29 - nBit;
            n = n - 1;
        }
        if(nIsEnd)
            break;
        m = m + 1;
    }
    
    wCurYear = 1921 + m;
    wCurMonth = k - n + 1;
    wCurDay = nTheDate;
    
    if (k == 12) {
        if (wCurMonth == wNongliData[m] / 65536 + 1)
            wCurMonth = 1 - wCurMonth;
        else if (wCurMonth > wNongliData[m] / 65536 + 1)
            wCurMonth = wCurMonth - 1;
    }
    //生成农历月
    NSString *szNongliMonth;
    if (wCurMonth < 1){
        szNongliMonth = [NSString stringWithFormat:@"闰%@",(NSString *)[cMonName objectAtIndex:-1 * wCurMonth]];
    }else{
        szNongliMonth = (NSString *)[cMonName objectAtIndex:wCurMonth];
    }
    //生成农历日
    NSString *szNongliDay = [cDayName objectAtIndex:wCurDay];
    //合并
    NSString *lunarDate = [NSString stringWithFormat:@"农历%@月%@",szNongliMonth,szNongliDay];
    return lunarDate;
}

 

Guess you like

Origin www.cnblogs.com/gongyuhonglou/p/11493244.html