新曆(公曆 西曆)轉換農曆(精確

2021-06-27 00:34:37 字數 1578 閱讀 3199

//農曆轉換函式

-(nsstring*)lunarforsolar:(nsdate*)solardate

;

//農曆資料

constintwnonglidata[100] =;

staticintwcuryear,wcurmonth,wcurday;

staticintnthedate,nisend,m,k,n,i,nbit;

//取當前公曆年、月、日

nsdatecomponents*components= [[nscalendarcurrentcalendar]components:nsdaycalendarunit|nsmonthcalendarunit| nsyearcalendarunit fromdate:solardate];

wcuryear = [componentsyear];

wcurmonth = [componentsmonth];

wcurday = [componentsday];

//計算到初始時間2023年2月8日的天數:1921-2-8(正月初一)

nthedate = (wcuryear -1921) *365+ (wcuryear- 1921) /4+ wcurday +wmonthadd[wcurmonth -1] -38;

if((!(wcuryear%4))&& (wcurmonth >2))

nthedate = nthedate +1;

//計算農曆天乾、地支、月、日

nisend =0;

m=0;

while(nisend!=1)

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)

//生成農曆天乾、地支、屬相

nsstring*szshuxiang= (nsstring*)[cshuxiang objectatindex:((wcuryear-4) %60) %12];

nsstring*sznongli =[nsstringstringwithformat:@"%@(%@%@)年",szshuxiang,(nsstring*)[ctiangan objectatindex:((wcuryear-4) %60) %10],(nsstring*)[cdizhi objectatindex:((wcuryear-4) %60) %12]];

//生成農曆月、日

nsstring*sznongliday;

if(wcurmonth< 1)

else

nsstring*lunardate =[nsstringstringwithformat:@"%@ %@月%@",sznongli,sznongliday,(nsstring*)[cdayname objectatindex:wcurday]];

returnlunardate;

}

公曆轉農曆

public string chineselunisolardate datetime adatatime 年月 甲乙丙丁戊己庚辛壬癸 year 4 10 子丑寅卯辰巳午未申酉戌亥 year 4 12 鼠牛虎兔龍蛇馬羊猴雞狗豬 year 4 12 month leapmonth 潤 無正二三四五六七...

西曆轉和曆函式

對日開發中可能會經常遇到日期格式的轉換,最頭疼的就是系統時間轉日本和歷的問題。多數的時候大家都是自己寫函式來計算日本各時期皇帝的在位時間來進行轉換的,其實.net中已經內建日本這一特殊的日曆計算演算法。運用globalization下的calendar和calendar 類我們就很容易的進行這種西曆...

西曆轉和曆函式

對日開發中可能會經常遇到日期格式的轉換,最頭疼的就是系統時間轉日本和歷的問題。多數的時候大家都是自己寫函式來計算日本各時期皇帝的在位時間來進行轉換的,其實.net中已經內建日本這一特殊的日曆計算演算法。運用globalization下的calendar和calendar 類我們就很容易的進行這種西曆...