C Objective C 公曆轉農曆方法

2021-08-27 04:34:43 字數 3652 閱讀 1839

c: **:

/*------------

農曆轉換函式

-----------*/

char *getdayof(psystemtime pst);/*

地支名稱

*/const

char *cdizhi = ; /*

屬相名稱

*/const

char *cshuxiang = ; /*

農曆日期名

*/const

char

*cdayname = ; /*

農曆月份名

*/const

char *cmonname = ;

/*公曆每月前面的天數

*/const

int wmonthadd[12] = ; /*

農曆資料

*/const

intwnonglidata[100] = ;

static

int wcuryear,wcurmonth,wcurday;

static

int nthedate,nisend,m,k,n,i,nbit;

tchar sznongli[30], sznongliday[10],szshuxiang[10];

/*---

取當前公曆年、月、日

---*/

wcuryear = pst->wyear;

wcurmonth = pst->wmonth;

wcurday = pst->wday;

/*---

計算到初始時間

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)

m = m + 1;

}wcuryear = 1921 + m;

wcurmonth = k - n + 1;

wcurday = nthedate;

if (k == 12)

else

if (wcurmonth > wnonglidata[m] / 65536 + 1)

}/*--

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

==> wnongli--*/

wsprintf(szshuxiang,"%s",cshuxiang[((wcuryear - 4) % 60) % 12]);

wsprintf(sznongli,"%s(%s%s)

年",szshuxiang,ctiangan[((wcuryear - 4) % 60) %10],cdizhi[((wcuryear - 4) % 60) % 12]);

/*--

生成農曆月、日

==> wnongliday--*/

if (wcurmonth < 1)

else

strcat(sznongliday,"

月");

strcat(sznongliday,cdayname[wcurday]);

return

strcat(sznongli,sznongliday);

}objective-c **:

//農曆轉換函式

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

//農曆資料

const

intwnonglidata[100] = ;

static

int wcuryear,wcurmonth,wcurday;

static

int nthedate,nisend,m,k,n,i,nbit;

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

nsdatecomponents

*components = [[

nscalendar

currentcalendar] components:nsdaycalendarunit|nsmonthcalendarunit| nsyearcalendarunitfromdate:solardate];

wcuryear = [components year];

wcurmonth = [components month];

wcurday = [components day];

//計算到初始時間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 = [nsstring

stringwithformat:@"%@(%@%@)

年",szshuxiang, (nsstring *)[ctianganobjectatindex:((wcuryear - 4) % 60) % 10],(nsstring *)[cdizhi objectatindex:((wcuryear - 4) % 60) %12]];

//生成農曆月、日

nsstring *sznongliday;

if (wcurmonth < 1)

else

nsstring *lunardate = [nsstring

stringwithformat:@"%@ %@

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

return lunardate;

}

公曆轉農曆

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

公曆轉農曆函式

庫名 gton.h 程式by gshuang1 ifndef gton h 防止過載 define gton h uchar idata datenong 4 uchar code data1 公曆各個月的天數 uchar code days in a mon 2 12 uchar yearstyp...

儒略日轉公曆 以及 公曆轉儒略日(python版)

作為乙個測繪專業小碼農,經常需要儒略日,年積日,gps週秒等的時間轉換。寫了個小函式方便每次的轉換時間,利用的是列表形式 mjd2cal 函式是簡化儒略日計算公曆年月日時分秒,輸入簡化儒略日 含小數 返回年月日時分秒的一維列表。cal2mjd 函式將公曆年月日時分秒轉換到簡化儒略日,輸入年月日時分秒...