公曆農曆c語言,c語言陽曆轉陰曆

本文目錄一覽:

c語言中關於農曆陽曆轉換問題 excess elements in char array initializer

excess elements in char array initializer 的意思是:在char數組初始化時,設置了多餘的元素。如:

const char ChDay[] = { //這裡定義的是一個一維字元數組,並進行初始化,一維數組的元素只能是單個的字元,而下面的數據卻是字元串,所以,在編譯時會報錯誤。

“”,”初一”,”初二”,”初三”,”初四”,”初五”,

“初六”,”初七”,”初八”,”初九”,”初十”,

“十一”,”十二”,”十三”,”十四”,”十五”,

“十六”,”十七”,”十八”,”十九”,”二十”,

“廿一”,”廿二”,”廿三”,”廿四”,”廿五”,

“廿六”,”廿七”,”廿八”,”廿九”,”三十”

};

正確的代碼應該為:

const char * ChDay[] = { //定義一個字元串數組(字元指針數組),其元素為字元串( 字元指針 )

“”,”初一”,”初二”,”初三”,”初四”,”初五”,

“初六”,”初七”,”初八”,”初九”,”初十”,

“十一”,”十二”,”十三”,”十四”,”十五”,

“十六”,”十七”,”十八”,”十九”,”二十”,

“廿一”,”廿二”,”廿三”,”廿四”,”廿五”,

“廿六”,”廿七”,”廿八”,”廿九”,”三十”

};

或,定義成二維數組,因一個漢字最多佔三個位元組,初始化數據中,最長的只有兩個漢字,所以,可以進行如下定義:

const char ChDay[][7] = { //列寬最大為7(兩個漢字加一個字元串結束符)

“”,”初一”,”初二”,”初三”,”初四”,”初五”,

“初六”,”初七”,”初八”,”初九”,”初十”,

“十一”,”十二”,”十三”,”十四”,”十五”,

“十六”,”十七”,”十八”,”十九”,”二十”,

“廿一”,”廿二”,”廿三”,”廿四”,”廿五”,

“廿六”,”廿七”,”廿八”,”廿九”,”三十”

};

請問誰有陽曆陰曆的轉換演算法,用C語言編程的,謝謝

Dim WeekName(7), MonthAdd(11), NongliData(99), TianGan(9), DiZhi(11), ShuXiang(11), DayName(30), MonName(12)

Dim curTime, curYear, curMonth, curDay, curWeekday

Dim GongliStr, WeekdayStr, NongliStr, NongliDayStr

Dim i, m, n, k, isEnd, bit, TheDate

Private Sub Form_Load()

‘獲取當前系統時間

curTime = Now()

‘星期名

WeekName(0) = ” * “

WeekName(1) = “星期日”

WeekName(2) = “星期一”

WeekName(3) = “星期二”

WeekName(4) = “星期三”

WeekName(5) = “星期四”

WeekName(6) = “星期五”

WeekName(7) = “星期六”

‘天干名稱

TianGan(0) = “甲”

TianGan(1) = “乙”

TianGan(2) = “丙”

TianGan(3) = “丁”

TianGan(4) = “戊”

TianGan(5) = “己”

TianGan(6) = “庚”

TianGan(7) = “辛”

TianGan(8) = “壬”

TianGan(9) = “癸”

‘地支名稱

DiZhi(0) = “子”

DiZhi(1) = “丑”

DiZhi(2) = “寅”

DiZhi(3) = “卯”

DiZhi(4) = “辰”

DiZhi(5) = “巳”

DiZhi(6) = “午”

DiZhi(7) = “未”

DiZhi(8) = “申”

DiZhi(9) = “酉”

DiZhi(10) = “戌”

DiZhi(11) = “亥”

‘屬相名稱

ShuXiang(0) = “鼠”

ShuXiang(1) = “牛”

ShuXiang(2) = “虎”

ShuXiang(3) = “兔”

ShuXiang(4) = “龍”

ShuXiang(5) = “蛇”

ShuXiang(6) = “馬”

ShuXiang(7) = “羊”

ShuXiang(8) = “猴” ;

ShuXiang(9) = “雞”

ShuXiang(10) = “狗”

ShuXiang(11) = “豬”

‘農曆日期名

DayName(0) = “*”

DayName(1) = “初一”

DayName(2) = “初二”

DayName(3) = “初三”

DayName(4) = “初四”

DayName(5) = “初五”

DayName(6) = “初六”

DayName(7) = “初七”

DayName(8) = “初八”

DayName(9) = “初九”

DayName(10) = “初十”

DayName(11) = “十?quot;”

DayName(12) = “十二”

DayName(13) = “十三”

DayName(14) = “十四”

DayName(15) = “十五”

DayName(16) = “十六”

DayName(17) = “十七”

DayName(18) = “十八”

DayName(19) = “十九”

DayName(20) = “二十”

DayName(21) = “廿一”

DayName(22) = “廿二”

DayName(23) = “廿三”

DayName(24) = “廿四”

DayName(25) = “廿五”

DayName(26) = “廿六”

DayName(27) = “廿七”

DayName(28) = “廿八”

DayName(29) = “廿九”

DayName(30) = “三十”

‘農曆月份名

MonName(0) = “*”

MonName(1) = “正”

MonName(2) = “二”

MonName(3) = “三”

MonName(4) = “四”

MonName(5) = “五”

MonName(6) = “六”

MonName(7) = “七”

MonName(8) = “八”

MonName(9) = “九”

MonName(10) = “十”

MonName(11) = “十一”

MonName(12) = “臘”

‘公曆每月前面的天數

MonthAdd(0) = 0

MonthAdd(1) = 31

MonthAdd(2) = 59

MonthAdd(3) = 90

MonthAdd(4) = 120

MonthAdd(5) = 151

MonthAdd(6) = 181

MonthAdd(7) = 212

MonthAdd(8) = 243

MonthAdd(9) = 273

MonthAdd(10) = 304

MonthAdd(11) = 334

‘農曆數據

NongliData(0) = 2635

NongliData(1) = 333387

NongliData(2) = 1701

NongliData(3) = 1748

NongliData(4) = 267701

NongliData(5) = 694

NongliData(6) = 2391

NongliData(7) = 133423

NongliData(8) = 1175

NongliData(9) = 396438

NongliData(10) = 3402

NongliData(11) = 3749

NongliData(12) = 331177

NongliData(13) = 1453

NongliData(14) = 694

NongliData(15) = 201326

NongliData(16) = 2350

NongliData(17) = 465197

NongliData(18) = 3221

NongliData(19) = 3402

NongliData(20) = 400202

NongliData(21) = 2901

NongliData(22) = 1386

NongliData(23) = 267611

NongliData(24) = 605

NongliData(25) = 2349

NongliData(26) = 137515

NongliData(27) = 2709

NongliData(28) = 464533

NongliData(29) = 1738

NongliData(30) = 2901

NongliData(31) = 330421

NongliData(32) = 1242

NongliData(33) = 2651

NongliData(34) = 199255

NongliData(35) = 1323

NongliData(36) = 529706

NongliData(37) = 3733

NongliData(38) = 1706

NongliData(39) = 398762

NongliData(40) = 2741

NongliData(41) = 1206

NongliData(42) = 267438

NongliData(43) = 2647

NongliData(44) = 1318

NongliData(45) = 204070

NongliData(46) = 3477

NongliData(47) = 461653

NongliData(48) = 1386

NongliData(49) = 2413

NongliData(50) = 330077

NongliData(51) = 1197

NongliData(52) = 2637

NongliData(53) = 268877

NongliData(54) = 3365

NongliData(55) = 531109

NongliData(56) = 2900

NongliData(57) = 2922

NongliData(58) = 398042

NongliData(59) = 2395

NongliData(60) = 1179

NongliData(61) = 267415

NongliData(62) = 2635

NongliData(63) = 661067

NongliData(64) = 1701

NongliData(65) = 1748

NongliData(66) = 398772

NongliData(67) = 2742

NongliData(68) = 2391

NongliData(69) = 330031

NongliData(70) = 1175

NongliData(71) = 1611

NongliData(72) = 200010

NongliData(73) = 3749

NongliData(74) = 527717

NongliData(75) = 1452

NongliData(76) = 2742

NongliData(77) = 332397

NongliData(78) = 2350

NongliData(79) = 3222

NongliData(80) = 268949

NongliData(81) = 3402

NongliData(82) = 3493

NongliData(83) = 133973

NongliData(84) = 1386

NongliData(85) = 464219

NongliData(86) = 605

NongliData(87) = 2349

NongliData(88) = 334123

NongliData(89) = 2709

NongliData(90) = 2890

NongliData(91) = 267946

NongliData(92) = 2773

NongliData(93) = 592565

NongliData(94) = 1210

NongliData(95) = 2651

NongliData(96) = 395863

NongliData(97) = 1323

NongliData(98) = 2707

NongliData(99) = 265877

‘生成當前公曆年、月、日 == GongliStr

curYear = Year(curTime)

curMonth = Month(curTime)

curDay = Day(curTime)

GongliStr = curYear “年”

If (curMonth 10) Then

GongliStr = GongliStr “0” curMonth “月”

Else

GongliStr = GongliStr curMonth “月”

End If

If (curDay 10) Then

GongliStr = GongliStr “0” curDay “日”

Else

GongliStr = GongliStr curDay “日”

End If

‘生成當前公曆星期 == WeekdayStr

curWeekday = Weekday(curTime)

WeekdayStr = WeekName(curWeekday)

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

TheDate = (curYear – 1921) * 365 + Int((curYear – 1921) / 4) + curDay + MonthAdd(curMonth – 1) – 38

If ((curYear Mod 4) = 0 And curMonth 2) Then

TheDate = TheDate + 1

End If

‘計算農曆天干、地支、月、日

isEnd = 0

m = 0

Do

If (NongliData(m) 4095) Then

k = 11

Else

k = 12

End If

n = k

Do

If (n 0) Then

Exit Do

End If

‘獲取NongliData(m)的第n個二進位位的值

bit = NongliData(m)

For i = 1 To n Step 1

bit = Int(bit / 2)

Next

bit = bit Mod 2

If (TheDate = 29 + bit) Then

isEnd = 1

Exit Do

End If

TheDate = TheDate – 29 – bit

n = n – 1

Loop

If (isEnd = 1) Then

Exit Do

End If

m = m + 1

Loop

curYear = 1921 + m

curMonth = k – n + 1

curDay = TheDate

If (k = 12) Then

If (curMonth = (Int(NongliData(m) / 65536) + 1)) Then

curMonth = 1 – curMonth

ElseIf (curMonth (Int(NongliData(m) / 65536) + 1)) Then

curMonth = curMonth – 1

End If

End If

‘生成農曆天干、地支、屬相 == NongliStr

NongliStr = “農曆” TianGan(((curYear – 4) Mod 60) Mod 10) DiZhi(((curYear – 4) Mod 60) Mod 12) “年”

NongliStr = NongliStr “(” ShuXiang(((curYear – 4) Mod 60) Mod 12) “)”

‘生成農曆月、日 == NongliDayStr

If (curMonth 1) Then

NongliDayStr = “閏” MonName(-1 * curMonth)

Else

NongliDayStr = MonName(curMonth)

End If

NongliDayStr = NongliDayStr “月”

NongliDayStr = NongliDayStr DayName(curDay)

MsgBox NongliStr NongliDayStr

End Sub

誰有將陽曆轉換成陰曆的C語言程序代碼啊

我剛好有資源,這是我原創的程序,裡面的數據壓縮方式、轉換、參考點等,都是自行設計的,能夠準確地將公曆轉農曆,將農曆轉公曆,同時還提供一個自行設計的農曆庫,附帶常式,還有農曆信息提取工具,可以自定義年份區間(1600-7000)。

農曆信息提取器生成的頭文件(這裡限於篇幅,只取10年跨度)

/*****************************************************

* 農曆信息(查表方式)         *

* 生成時間:2014/12/25         *

*****************************************************/

#ifndef _LUNARDATA_H

#define _LUNARDATA_H

#define START_YEAR 1600 //定義數據起始年份(公曆)

#define END_YEAR 1610 //定義數據終止年份(不包含該年)

short iPreLeapIndex=-1;//起始年份以前的農曆閏月索引,對應iPreMonth中的序號,如果是-1則代表無閏月。

//從起始年份前一年的農曆十月開始,每月初一對應在起始年份中的年內序數,

//序數小於零代表起始年份之前。

short iPreMonth[3]={-44,-15,15};

//每年農曆正月初一的日期在公曆年內的序數(年內序數指定元旦為0)。

unsigned char uLunarNewYearOrdinal[10]={

 44,33,22,41,30,48,37,27,46,34  //1600-1609

};

//月份大小數組,從「START_YEAR」的正月到「END_YEAR」前一年的(閏)十二月。

//每年十二或十三個月用兩個位元組表示,最高兩位定為10,後面從正月開始到十二月,包含閏月。月份小的在前,

//1 0           0或1                         x x x x x x x x x x x x x

//1 0   12個月為0,13個月為1    從正月到十二月,月份天數29天則為0,月份天數30天則為1。

//注意,如果沒有閏月,月份位為12位,總長度是15位,有閏月,月份位為13位,總長度是16位。

unsigned short LunarMonthDX[10]={

 0x4A5D,0x492D,0xB92B,0x4A95,0xB695,0x46AA,0x4AD5,0xAAB5,0x44BA,0x4A5B  //1600-1609

};

//閏月數組,用4位表示一個農曆年內的閏月信息,一個位元組表示相鄰兩年。

// x x x x   x x x x

//  年份①    年份②

unsigned char LeapMonth[5]={

 0x00,0x20,0x90,0x06,0x00  //1600-1609

};

//24節氣數組,一年用12個位元組表示,即每個月用一個位元組(注意:此壓縮演算法適用於公元1600以後的數據)。

//如1901年的節氣為:

//    1月      2月       3月       4月       5月       6月      7月       8月       9月       10月      11月      12月

//  6,  21,  4,  19,   6,  21,   5,  21,    6, 22,    6, 22,    8, 23,    8, 24,    8, 24,    8, 24,    8, 23,    8, 22

//  9,  6,   11,  4,   9,   6,   10,  6,    9,  7,    9,  7,    7,  8,    7,  9,    7,  9,    7,  9,    7,  8,    7, 15

//小寒 大寒 立春 雨水 驚蟄 春分 清明 穀雨 立夏 小滿 芒種 夏至 小暑 大暑 立秋 處暑 白露 秋分 寒露 霜降 立冬 小雪 大雪 冬至

//這樣每月兩個節氣對應數據都小於16,每月用一個位元組存放,高位存放第一個節氣數據,低位存放第二個節氣的數據,可得下表:

unsigned char SolarTerms[120]={

 0x96,0x96,0x87,0x97,0x87,0x97,0x87,0x96,0x96,0x96,0x96,0x96, //1600

 0xA6,0xA5,0x87,0x87,0x87,0x87,0x87,0x97,0x96,0x97,0x96,0x96, //1601

 0x96,0xA5,0x88,0x87,0x88,0x87,0x87,0x87,0x96,0x87,0x96,0x97, //1602

 0x96,0xA6,0x78,0x87,0x78,0x87,0x88,0x87,0x97,0x87,0x96,0x87, //1603

 0x96,0x96,0x87,0x97,0x87,0x97,0x87,0x96,0x96,0x96,0xA6,0x96, //1604

 0xA6,0xA5,0x87,0x87,0x87,0x87,0x87,0x97,0x96,0x96,0x96,0x96, //1605

 0x96,0xA5,0x88,0x87,0x88,0x87,0x87,0x87,0x96,0x87,0x96,0x97, //1606

 0x96,0xA5,0x78,0x87,0x78,0x87,0x88,0x87,0x97,0x87,0x96,0x87, //1607

 0x96,0x96,0x87,0x97,0x87,0x96,0x87,0x96,0x96,0x96,0xA6,0x96, //1608

 0xA6,0xA5,0x87,0x87,0x87,0x87,0x87,0x97,0x96,0x96,0x96,0x96  //1609

};

//每年數九、入梅、出梅及三伏日期(以該年元旦為基準)。

//公曆年內首個是三九(適用於公元1600年以後)。

//數組中,每一行表示一年,四九、五九……省略,輸在每個九相差9天,同理二九省略,中伏在初伏後10天。分別對應如下(括弧中的已省略):

//三九 (四九 五九 六九 七九 八九 九九) 入梅 出梅 初伏 (中伏) 末伏 一九 (二九),注意:一九就是冬至。

unsigned short ExtermSeason[60]={

 8,165,190,199,219,355,7,159,196,193,223,355, //1600-1601

 7,164,191,198,218,355,8,159,198,193,223,355, //1602-1603

 8,164,193,198,218,355,7,158,199,202,222,355, //1604-1605

 7,163,194,197,227,355,8,158,189,202,222,355, //1606-1607

 8,163,196,197,227,355,7,167,190,201,221,354  //1608-1609

};

#endif //_LUNARDATA_H

用C語言怎麼將公曆日期轉化為農曆日期?

其實很簡單,你的程序中定義一些數組,保存一些重要參數即可,下面是JAVASCRIPT的,看懂了你就可以用C來寫:

var lunarInfo=new Array(

0x04bd8,0x04ae0,0x0a570,0x054d5,0x0d260,0x0d950,0x16554,0x056a0,0x09ad0,0x055d2,

0x04ae0,0x0a5b6,0x0a4d0,0x0d250,0x1d255,0x0b540,0x0d6a0,0x0ada2,0x095b0,0x14977,

0x04970,0x0a4b0,0x0b4b5,0x06a50,0x06d40,0x1ab54,0x02b60,0x09570,0x052f2,0x04970,

0x06566,0x0d4a0,0x0ea50,0x06e95,0x05ad0,0x02b60,0x186e3,0x092e0,0x1c8d7,0x0c950,

0x0d4a0,0x1d8a6,0x0b550,0x056a0,0x1a5b4,0x025d0,0x092d0,0x0d2b2,0x0a950,0x0b557,

0x06ca0,0x0b550,0x15355,0x04da0,0x0a5d0,0x14573,0x052d0,0x0a9a8,0x0e950,0x06aa0,

0x0aea6,0x0ab50,0x04b60,0x0aae4,0x0a570,0x05260,0x0f263,0x0d950,0x05b57,0x056a0,

0x096d0,0x04dd5,0x04ad0,0x0a4d0,0x0d4d4,0x0d250,0x0d558,0x0b540,0x0b5a0,0x195a6,

0x095b0,0x049b0,0x0a974,0x0a4b0,0x0b27a,0x06a50,0x06d40,0x0af46,0x0ab60,0x09570,

0x04af5,0x04970,0x064b0,0x074a3,0x0ea50,0x06b58,0x055c0,0x0ab60,0x096d5,0x092e0,

0x0c960,0x0d954,0x0d4a0,0x0da50,0x07552,0x056a0,0x0abb7,0x025d0,0x092d0,0x0cab5,

0x0a950,0x0b4a0,0x0baa4,0x0ad50,0x055d9,0x04ba0,0x0a5b0,0x15176,0x052b0,0x0a930,

0x07954,0x06aa0,0x0ad50,0x05b52,0x04b60,0x0a6e6,0x0a4e0,0x0d260,0x0ea65,0x0d530,

0x05aa0,0x076a3,0x096d0,0x04bd7,0x04ad0,0x0a4d0,0x1d0b6,0x0d250,0x0d520,0x0dd45,

0x0b5a0,0x056d0,0x055b2,0x049b0,0x0a577,0x0a4b0,0x0aa50,0x1b255,0x06d20,0x0ada0)

//====================================== 傳回農曆 y年的總天數

function lYearDays(y) {

var i, sum = 348

for(i=0x8000; i0x8; i=1) sum += (lunarInfo[y-1900] i)? 1: 0

return(sum+leapDays(y))

}

//====================================== 傳回農曆 y年閏月的天數

function leapDays(y) {

if(leapMonth(y)) return((lunarInfo[y-1900] 0x10000)? 30: 29)

else return(0)

}

//====================================== 傳回農曆 y年閏哪個月 1-12 , 沒閏傳回 0

function leapMonth(y) {

return(lunarInfo[y-1900] 0xf)

}

//====================================== 傳回農曆 y年m月的總天數

function monthDays(y,m) {

return( (lunarInfo[y-1900] (0x10000m))? 30: 29 )

}

萬年曆的c語言程序代碼包括節假日農曆,農曆轉公曆,公曆農曆查詢某

直接給你整個工程吧,實現了星期計算、公曆轉農曆、農曆轉公曆、節氣查詢。非常不錯的代碼,你要的年份範圍可以自己決定,支持從公元1600年到公元6400年的四千八百年數據。數據經過我精心設計的原創壓縮演算法壓縮,體積非常小,效率很高。

 密碼:n51c  (之前的不知啥原因被HX了,原創的都會被這樣,鑒於需要的朋友很多,重新更換了鏈接)。

如果需要開發日曆的完整開發包(支持更長年份),可私信。

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/183706.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-11-25 05:48
下一篇 2024-11-25 05:49

相關推薦

  • Python計算陽曆日期對應周幾

    本文介紹如何通過Python計算任意陽曆日期對應周幾。 一、獲取日期 獲取日期可以通過Python內置的模塊datetime實現,示例代碼如下: from datetime imp…

    編程 2025-04-29
  • AES加密解密演算法的C語言實現

    AES(Advanced Encryption Standard)是一種對稱加密演算法,可用於對數據進行加密和解密。在本篇文章中,我們將介紹C語言中如何實現AES演算法,並對實現過程進…

    編程 2025-04-29
  • 學習Python對學習C語言有幫助嗎?

    Python和C語言是兩種非常受歡迎的編程語言,在程序開發中都扮演著非常重要的角色。那麼,學習Python對學習C語言有幫助嗎?答案是肯定的。在本文中,我們將從多個角度探討Pyth…

    編程 2025-04-29
  • Python被稱為膠水語言

    Python作為一種跨平台的解釋性高級語言,最大的特點是被稱為”膠水語言”。 一、簡單易學 Python的語法簡單易學,更加人性化,這使得它成為了初學者的入…

    編程 2025-04-29
  • OpenJudge答案1.6的C語言實現

    本文將從多個方面詳細闡述OpenJudge答案1.6在C語言中的實現方法,幫助初學者更好地學習和理解。 一、需求概述 OpenJudge答案1.6的要求是,輸入兩個整數a和b,輸出…

    編程 2025-04-29
  • Python按位運算符和C語言

    本文將從多個方面詳細闡述Python按位運算符和C語言的相關內容,並給出相應的代碼示例。 一、概述 Python是一種動態的、面向對象的編程語言,其按位運算符是用於按位操作的運算符…

    編程 2025-04-29
  • Python語言由荷蘭人為中心的全能編程開發工程師

    Python語言是一種高級語言,很多編程開發工程師都喜歡使用Python語言進行開發。Python語言的創始人是荷蘭人Guido van Rossum,他在1989年聖誕節期間開始…

    編程 2025-04-28
  • Python語言設計基礎第2版PDF

    Python語言設計基礎第2版PDF是一本介紹Python編程語言的經典教材。本篇文章將從多個方面對該教材進行詳細的闡述和介紹。 一、基礎知識 本教材中介紹了Python編程語言的…

    編程 2025-04-28
  • Python語言實現人名最多數統計

    本文將從幾個方面詳細介紹Python語言實現人名最多數統計的方法和應用。 一、Python實現人名最多數統計的基礎 1、首先,我們需要了解Python語言的一些基礎知識,如列表、字…

    編程 2025-04-28
  • Python作為中心語言,在編程中取代C語言的優勢和挑戰

    Python一直以其簡單易懂的語法和高效的編碼環境而著名。然而,它最近的發展趨勢表明Python的使用範圍已經從腳本語言擴展到了從Web應用到機器學習等廣泛的開發領域。與此同時,C…

    編程 2025-04-28

發表回復

登錄後才能評論