公历转农历C/C++代码

1 篇文章 0 订阅
1 篇文章 0 订阅

**

**公历转农历C/C++的实现

**
本实现的算法,主要来自网络和加入自己的需要完善而来,有同样需要的人可以参考一下:
联系:domics.cn
用法:
备注:此文件是visual studio 2019中测试通过的(Release X86 Unicode字符集)
(1)在你的工程添加以下头文件代码和实现文件代码。
(2)在你需要的代码页中包含这个头文件即。

主要函数说明 :

(1)cnDate GetLunar(int yyyy, int mm, int dd);//公历转农历
把传入的公历日期,转换成农历。
(2) Date GetSolar(cnDate lunar);//农历转公历
将公历形书写的农历日期换成公历日期。
(3) Date GetDays24(int year, int index);//获取24节气的公历日期
year:你需要获取节气的年份,index:包含头文件后,你需要写上节气的首字母即可。如
GetDays24(2020,qm),即是返回2020年,清明(qm)公历日期,其它年份的任何节气类推。
(4) Date DaysAddOrSubtrack(Date date1, int days, bool bAdd = false);//date1 + days Or date1-days
日期计算:格式date1+X天或date1-X天,返回加或减后的日期。
如:(一定要包含以上写的头文件)
Date date;
date.year=2020;
date.math=5;
date.day=6;
DaysAddOrSubtrack(date,20,TRUE),即返回2020年5月6日20天后的日期。
DaysAddOrSubtrack(date,20,FALSE),即返回2020年5月6日20天前的日期。
bAdd,真为日期加(日期后),假为日期减(日期前)。
(5) IsLeapYear(int year);//判断给定的年份是不是闰年

返回值Date,cnDate结构说明:

typedef struct structDate
{
//农历部分结构
CString cnYear=TEXT("");//中文的年份(天干地支)
CString cnMonth = TEXT("");//中文月份(腊月至正月)
CString cnDay = TEXT("");//初一至三十
bool leap = false;//是否闰月

//公历部分结构
int year=0;//年
int month=0;//月
int day=0; //日    

}Date,cnDate;//公历、农历同一结构中

上面的函数,返回值是Date,cnDate格式的,说明这个结构体中,即可以有农历的形式,也有农历写成公历的形式的日期。

代码如下:

头文件部分:

#pragma once
/*头文件:cndays.h;对应的实现文件:cndays.cpp
本文件的实现,参考自多地个地方。我也记不清,如果你觉得
对你的著作权有损,请联系我需要我删除的请联系我:wx:domics
qq:1176708259。我收到信息后立即删除本博。谢谢!
如果没意见的话,就共大家分享吧!感激!*/
#include <cstring>
#include <tchar.h>
//来自网络的即说是天文观测数据。大意:
//0~4 共5bit 春节日份
//5~6 共2bit 春节月份
//7~19 共13bit 13个月的大小月情况(如果无闰月,最后位无效),大月为1,小月为0
//20~23 共4bit 记录闰月的月份,如果没有闰月为0

static const unsigned int BaseData[199] = {

     0x04AE53,0x0A5748,0x5526BD,0x0D2650,0x0D9544,
     0x46AAB9,0x056A4D,0x09AD42,0x24AEB6,0x04AE4A, //1901年-1910年

     0x6A4DBE,0x0A4D52,0x0D2546,0x5D52BA,0x0B544E,
     0x0D6A43,0x296D37,0x095B4B,0x749BC1,0x049754, //1911年-1920年

     0x0A4B48,0x5B25BC,0x06A550,0x06D445,0x4ADAB8,
     0x02B64D,0x095742,0x2497B7,0x04974A,0x664B3E, //1921年-1930年

     0x0D4A51,0x0EA546,0x56D4BA,0x05AD4E,0x02B644,
     0x393738,0x092E4B,0x7C96BF,0x0C9553,0x0D4A48, //1931年-1940年

     0x6DA53B,0x0B554F,0x056A45,0x4AADB9,0x025D4D,
     0x092D42,0x2C95B6,0x0A954A,0x7B4ABD,0x06CA51, //1941年-1950年

     0x0B5546,0x555ABB,0x04DA4E,0x0A5B43,0x352BB8,
     0x052B4C,0x8A953F,0x0E9552,0x06AA48,0x7AD53C, //1951年-1960年

     0x0AB54F,0x04B645,0x4A5739,0x0A574D,0x052642,
     0x3E9335,0x0D9549,0x75AABE,0x056A51,0x096D46, //1961年-1970年

     0x54AEBB,0x04AD4F,0x0A4D43,0x4D26B7,0x0D254B,
     0x8D52BF,0x0B5452,0x0B6A47,0x696D3C,0x095B50, //1971年-1980年

     0x049B45,0x4A4BB9,0x0A4B4D,0xAB25C2,0x06A554,
     0x06D449,0x6ADA3D,0x0AB651,0x093746,0x5497BB, //1981年-1990年

     0x04974F,0x064B44,0x36A537,0x0EA54A,0x86B2BF,
     0x05AC53,0x0AB647,0x5936BC,0x092E50,0x0C9645, //1991年-2000年

     0x4D4AB8,0x0D4A4C,0x0DA541,0x25AAB6,0x056A49,
     0x7AADBD,0x025D52,0x092D47,0x5C95BA,0x0A954E, //2001年-2010年

     0x0B4A43,0x4B5537,0x0AD54A,0x955ABF,0x04BA53,
     0x0A5B48,0x652BBC,0x052B50,0x0A9345,0x474AB9, //2011年-2020年

     0x06AA4C,0x0AD541,0x24DAB6,0x04B64A,0x69573D,
     0x0A4E51,0x0D2646,0x5E933A,0x0D534D,0x05AA43, //2021年-2030年

     0x36B537,0x096D4B,0xB4AEBF,0x04AD53,0x0A4D48,
     0x6D25BC,0x0D254F,0x0D5244,0x5DAA38,0x0B5A4C, //2031年-2040年

     0x056D41,0x24ADB6,0x049B4A,0x7A4BBE,0x0A4B51,
     0x0AA546,0x5B52BA,0x06D24E,0x0ADA42,0x355B37, //2041年-2050年

     0x09374B,0x8497C1,0x049753,0x064B48,0x66A53C,
     0x0EA54F,0x06B244,0x4AB638,0x0AAE4C,0x092E42, //2051年-2060年

     0x3C9735,0x0C9649,0x7D4ABD,0x0D4A51,0x0DA545,
     0x55AABA,0x056A4E,0x0A6D43,0x452EB7,0x052D4B, //2061年-2070年

     0x8A95BF,0x0A9553,0x0B4A47,0x6B553B,0x0AD54F,
     0x055A45,0x4A5D38,0x0A5B4C,0x052B42,0x3A93B6, //2071年-2080年

     0x069349,0x7729BD,0x06AA51,0x0AD546,0x54DABA,
     0x04B64E,0x0A5743,0x452738,0x0D264A,0x8E933E, //2081年-2090年

     0x0D5252,0x0DAA47,0x66B53B,0x056D4F,0x04AE45,
     0x4A4EB9,0x0A4D4C,0x0D1541,0x2D92B5 //2091年-2099年 

};


typedef struct structDate
{
    //农历部分结构
    CString cnYear=TEXT("");//中文的年份(天干地支+生肖年)
    CString cnMonth = TEXT("");//中文月份(腊月至正月)
    CString cnDay = TEXT("");//初一至三十
    BOOL  leap = FALSE;//是否闰月

    //公历部分结构:返回值其实是农历日期的公历书写形式。
    int year=0;//年
    int month=0;//月
    int day=0; //日    

}Date,cnDate;//公历、农历同一结构中

/*xh:小寒的首字母,其它的类推:用首字母方便记。
0小寒1大寒2立春3雨水4惊蛰5春分6清明7谷雨
8立夏9小满10芒种11夏至12小暑13大暑14立秋15处暑
16白露17秋分18寒露19霜降20立冬21小雪22大雪23冬至*/
const int xh= 0; const int dh = 1;const int lc = 2; 
const int ys = 3; const int jz = 4; const int cf = 5; 
const int qm = 6; const int gy = 7; const int lx = 8; 
const int xm = 9; const int mz = 10; const int xz = 11; 
const int xs= 12; const int ds = 13; const int lq = 14; 
const int cs = 15; const int bl = 16; const int qf = 17; 
const int hl = 18; const int sj = 19; const int ld = 20; 
const int xx = 21; const int dx = 22; const int dz = 23; 

//类
class CCnDays
{
   
public:
    cnDate GetLunar(int yyyy, int mm, int dd);//公历转农历   

    Date GetSolar(cnDate lunar);//农历转公历  

    Date GetDays24(int year, int index);//获取24节气的公历日期

    Date DaysAddOrSubtrack(Date date1, int days, bool bAdd = false);//date1 + days Or date1-days

    bool IsLeapYear(int year);//判断给定的年份是不是闰年    

    CString cn24Days[24] = 
    {
        TEXT("小寒"),TEXT("大寒"),TEXT("立春"),TEXT("雨水"),        
        TEXT("惊蛰"),TEXT("春分"),TEXT("清明"),TEXT("谷雨"),
        TEXT("立夏"),TEXT("小满"),TEXT("芒种"),TEXT("夏至"),
        TEXT("小暑"),TEXT("大暑"),TEXT("立秋"),TEXT("处暑"),
        TEXT("白露"),TEXT("秋分"),TEXT("寒露"),TEXT("霜降"),
        TEXT("立冬"),TEXT("小雪"),TEXT("大雪"),TEXT("冬至")
    };    

    CString cn24DaysOnMonth[12] =
    {
        TEXT("大寒"),TEXT("雨水"),TEXT("春分"),TEXT("谷雨"),
        TEXT("小满"),TEXT("夏至"),TEXT("大暑"),TEXT("处暑"),
        TEXT("秋分"),TEXT("霜降"),TEXT("小雪"),TEXT("冬至")
    };

    CString cnMonth[12] =
    {
        TEXT("正月"),TEXT("二月"),TEXT("三月"),TEXT("四月"),
        TEXT("五月"),TEXT("六月"),TEXT("七月"),TEXT("八月"),
        TEXT("九月"),TEXT("十月"),TEXT("冬月"),TEXT("腊月")
    };

    CString cnDays[30] =
    {
        TEXT("初一"),TEXT("初二"),TEXT("初三"),TEXT("初四"),
        TEXT("初五"),TEXT("初六"),TEXT("初七"),TEXT("初八"),
        TEXT("初九"),TEXT("初十"),TEXT("十一"),TEXT("十二"),
        TEXT("十三"),TEXT("十四"),TEXT("十五"),TEXT("十六"),
        TEXT("十七"),TEXT("十八"),TEXT("十九"),TEXT("二十"),
        TEXT("廿一"),TEXT("廿二"),TEXT("廿三"),TEXT("廿四"),
        TEXT("廿五"),TEXT("廿六"),TEXT("廿七"),TEXT("廿八"),
        TEXT("廿九"),TEXT("三十")
    };

protected:   
    int monthTotal[13] = { 0,31,59,90,120,151,181,212,243,273,304,334,365 };//公农历转换时用

    

    int DaysOfMonth[12] = {31,28,31,30,31,30,31,31,30,31,30,31};//每个月的天数,内部使用   

    int GetDaysOfMonth(int year,int month);//获取每月的天数

    Date DaysToDate(int ndays);//将GetDays24()函数返回值转换成月日   

    cnDate GetLunarPart(int yyyy, int mm, int dd);//公历转农历   
};

实现文件部分:



#include "pch.h" //注意这个头文件是visual studio 2010工程都有的。版本不同就不同
#include "cndays.h"
#include <ctime>
#include <cassert>

cnDate CCnDays::GetLunar(int yyyy, int mm, int dd)
{
    cnDate lunar=GetLunarPart(yyyy,mm,dd);   
    
    //再计算农历年的天干地支与生肖年:
    CString sx[12] =
    {
        TEXT("鼠"),TEXT("牛"),TEXT("虎"),TEXT("兔"),TEXT("龙"),TEXT("蛇"),
        TEXT("马"),TEXT("羊"),TEXT("猴"),TEXT("鸡"),TEXT("狗"),TEXT("猪")
    };

    /*甲、乙、丙、丁、戊、己、庚、辛、壬、癸被称为“十天干”,
    子、丑、寅、卯、辰、巳、午、未、申、酉、戌、亥叫作“十二地支”*/

    CString tg[10] =
    {
        TEXT("甲"),TEXT("乙"),TEXT("丙"),TEXT("丁"),TEXT("戊"),
        TEXT("己"),TEXT("庚"),TEXT("辛"),TEXT("壬"),TEXT("癸")
    };

    /*甲、乙、丙、丁、戊、己、庚、辛、壬、癸被称为“十天干”,
   子、丑、寅、卯、辰、巳、午、未、申、酉、戌、亥叫作“十二地支”*/

    CString dz[12] =
    {
        
        TEXT("子"),TEXT("丑"),TEXT("寅"),TEXT("卯"),TEXT("辰"),TEXT("巳"),
        TEXT("午"),TEXT("未"),TEXT("申"),TEXT("酉"),TEXT("戌"),TEXT("亥")

    };

    lunar.cnYear = tg[(lunar.year - 1864) % 10];//天干
    lunar.cnYear += dz[(lunar.year - 1864) % 12];//地支
    lunar.cnYear +=TEXT("【")+ sx[(lunar.year - 1900) % 12]+ TEXT("】年");//生肖
    
    //格成农历月
    if (lunar.leap)
    {
        Date ld1, ld2 = lunar;
        ld1.year = yyyy; ld1.month = mm; ld1.day = dd;

        //农历前一个月的最后一天的公历日期
        ld2 = DaysAddOrSubtrack(ld1, ld2.day, false);

        //农历前一个月的最后一天的农历日期
        ld1 = GetLunarPart(ld2.year, ld2.month, ld2.day);

        if (lunar.month == ld1.month)
        {
            lunar.cnMonth =TEXT("闰")+ cnMonth[lunar.month - 1];
        }
        else
        {
            lunar.cnMonth = cnMonth[lunar.month - 1];
        }

    }
    else
    {
        lunar.cnMonth = cnMonth[lunar.month - 1];
    }    
    

    //格成农历日
    lunar.cnDay = cnDays[lunar.day-1];
       

    return lunar;
}

Date CCnDays::GetSolar(cnDate lunar)
{

   **/*来自网络高手部分代码*/**
    int year = lunar.year,
        month = lunar.month,
        day = lunar.day;
    int byNow, xMonth, i;
    Date solar;
    byNow = (BaseData[year - 1901] & 0x001F) - 1;
    if (((BaseData[year - 1901] & 0x0060) >> 5) == 2)
        byNow += 31;
    for (i = 1; i < month; i++) {
        if ((BaseData[year - 1901] & (0x80000 >> (i - 1))) == 0) {
            byNow += 29;
        }
        else
            byNow += 30;
    }
    byNow += day;
    xMonth = (BaseData[year - 1901] & 0xf00000) >> 20;
    if (xMonth != 0) {
        if (month > xMonth
            || (month == xMonth && lunar.leap)) {
            if ((BaseData[year - 1901] & (0x80000 >> (month - 1))) == 0)
                byNow += 29;
            else
                byNow += 30;
        }
    }
    if (byNow > 366
        || (year % 4 != 0 && byNow == 365)) {
        year += 1;
        if (year % 4 == 0)
            byNow -= 366;
        else
            byNow -= 365;
    }
    for (i = 1; i <= 13; i++) {
        if (monthTotal[i] >= byNow) {
            month = i;
            break;
        }
    }
    solar.day = byNow - monthTotal[month - 1];
    solar.month = month;
    solar.year = year;

    return solar;
}

//GetDays24(int year, int index)与DyasOneToDate(int nCnDayOne)
//结合起来计算指定24节气在公历中的日期=======================================

Date CCnDays::GetDays24(int year, int index)
{
    /*来自网络经验公式,至2099年有效*/
    int y = year-1900;   

    int ymd = 365.242 * y+ 6.2 + 15.22 * index - 1.9 * sin(0.262 * index);

    Date rd = DaysToDate(ymd);

    rd.year=year;

    return rd;
}/*//GetDays24(int year, int index)与DyasOneToDate(int nCnDayOne)
//结合起来计算指定24节气在公历中的日期
=========================================================================*/

bool CCnDays::IsLeapYear(int year)
{
    if (year % 400 == 0)
    {
        return true;
    }
    else if(year%100==0)
    {
        return false;
    }
    else if(year%4==0)
    {
        return true;
    }
	return false;
}

Date CCnDays::DaysToDate(int ndays)
{
    int m = 0; int y = 1900;
    Date d;

    while (ndays > GetDaysOfMonth(y,m))
    {
        ndays = ndays - GetDaysOfMonth(y,m);
        m = (m + 1)%12;

        if (m == 0)y += 1;

        d.year = y;
        d.month = m + 1;
        d.day = ndays;      
    }

    return d;
}

cnDate CCnDays::GetLunarPart(int yyyy, int mm, int dd)
{
      **/*来自网络高手部分代码*/**
    int year = yyyy, month = mm, day = dd;
    int bySpring, bySolar, daysPerMonth;
    int index, flag;
    cnDate plunar;

    //bySpring 记录春节离当年元旦的天数。
    //bySolar 记录阳历日离当年元旦的天数。
    if (((BaseData[year - 1901] & 0x0060) >> 5) == 1)
        bySpring = (BaseData[year - 1901] & 0x001F) - 1;
    else
        bySpring = (BaseData[year - 1901] & 0x001F) - 1 + 31;
    bySolar = monthTotal[month - 1] + day - 1;
    if ((!(year % 4)) && (month > 2))
        bySolar++;

    //daysPerMonth记录大小月的天数 29 或30
    //index 记录从哪个月开始来计算。
    //flag 是用来对闰月的特殊处理。

    //判断阳历日在春节前还是春节后
    if (bySolar >= bySpring) {//阳历日在春节后(含春节那天)
        bySolar -= bySpring;
        month = 1;
        index = 1;
        flag = 0;
        if ((BaseData[year - 1901] & (0x80000 >> (index - 1))) == 0)
            daysPerMonth = 29;
        else
            daysPerMonth = 30;
        while (bySolar >= daysPerMonth) {
            bySolar -= daysPerMonth;
            index++;
            if (month == ((BaseData[year - 1901] & 0xF00000) >> 20)) {
                flag = ~flag;
                if (flag == 0)
                    month++;
            }
            else
                month++;
            if ((BaseData[year - 1901] & (0x80000 >> (index - 1))) == 0)
                daysPerMonth = 29;
            else
                daysPerMonth = 30;
        }
        day = bySolar + 1;
    }
    else {//阳历日在春节前
        bySpring -= bySolar;
        year--;
        month = 12;
        if (((BaseData[year - 1901] & 0xF00000) >> 20) == 0)
            index = 12;
        else
            index = 13;
        flag = 0;
        if ((BaseData[year - 1901] & (0x80000 >> (index - 1))) == 0)
            daysPerMonth = 29;
        else
            daysPerMonth = 30;
        while (bySpring > daysPerMonth) {
            bySpring -= daysPerMonth;
            index--;
            if (flag == 0)
                month--;
            if (month == ((BaseData[year - 1901] & 0xF00000) >> 20))
                flag = ~flag;
            if ((BaseData[year - 1901] & (0x80000 >> (index - 1))) == 0)
                daysPerMonth = 29;
            else
                daysPerMonth = 30;
        }

        day = daysPerMonth - bySpring + 1;
    }
    plunar.day = day;
    plunar.month = month;
    plunar.year = year;
    if (month == ((BaseData[year - 1901] & 0xF00000) >> 20))
        plunar.leap = true;
    else
        plunar.leap = false;

    return plunar;
}

Date CCnDays::DaysAddOrSubtrack(Date date1, int days, bool bAdd)
{
   if (bAdd)//真为加,
    {
        /*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
        days += date1.day;

        if (IsLeapYear(date1.year))//闰年
        {
            /*rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr*/
            if (date1.month == 2)
            {
                if (days > 29)
                {
                    days = days % 29;
                    date1.month+=(days/29);
                    if (date1.month > 12)date1.year+=(date1.month/12);
                }
            }
            else if(date1.month==1|| date1.month == 3 || date1.month == 5 ||    date1.month == 7 
                || date1.month == 8 || date1.month == 10 || date1.month == 12 )//大月
            {
                if (days > 31)
                {
                    days = days % 31;
                    date1.month+=(days % 31);
                    if (date1.month > 12)date1.year+= (date1.month/12);
                }

            }
            else if (date1.month == 4 || date1.month == 6 || date1.month == 9|| date1.month == 11 )//小月
            {
                if (days > 30)
                {
                    days = days % 30;
                    date1.month+=(days % 30);
                    if (date1.month > 12)date1.year+=(date1.month/12);
                }

            }
            /*rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr*/

            
        }
        else//平年
        {
            /*pppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp*/

            if (date1.month == 2)
            {
                if (days > 28)
                {
                    days = days % 28;
                    date1.month += (days % 28);
                    if (date1.month > 12)date1.year += (date1.month / 12);
                }

            }
            else if (date1.month == 1 || date1.month == 3 || date1.month == 5 || date1.month == 7
                || date1.month == 8 || date1.month == 10 || date1.month == 12)//大月
            {
                if (days > 31)
                {
                    days = days % 31;
                    date1.month += (days % 31);
                    if (date1.month > 12)date1.year += (date1.month / 12);
                }

            }
            else if (date1.month == 4 || date1.month == 6 || date1.month == 9 || date1.month == 11)//小月
            {
                if (days > 30)
                {
                    days = days % 30;
                    date1.month += (days % 30);
                    if (date1.month > 12)date1.year += (date1.month / 12);
                }
            }

            /*pppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp*/

           
        }

       

       /*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/        
    }
    else//假为减法
    {
        /*妈呀日期的减法怎么这么难搞只能都用最笨的办法来了*/        

       for (int caldays =days; caldays>=1; --caldays)
       {
            date1.day--; //自减一天。

           if (date1.day== 0)
           {
               date1.month--;
               //处理二月份,分平、闰年的情况

               if (IsLeapYear(date1.year))//闰年
               {
                   if (date1.month == 2)
                   {
                       date1.day = 29;
                   }
                   else if (date1.month == 1 || date1.month == 3 || date1.month == 5 || date1.month == 7 || date1.month == 8 
                       || date1.month == 10 || date1.month == 12)//大月
                   {
                       date1.day = 31;
                   }
                   else if (date1.month == 4 || date1.month == 6 || date1.month == 9 || date1.month == 11)//小月
                   {
                       date1.day = 30;
                   }
                   else if (date1.month == 0)
                   {
                       date1.month = 12;
                       date1.day = 31;
                       date1.year--;
                   }

               }
               else//平年
               {
                   if (date1.month == 2)
                   {
                       date1.day = 28;
                   }
                   else if (date1.month == 1 || date1.month == 3 || date1.month == 5 || date1.month == 7 
                       || date1.month == 8 || date1.month == 10 || date1.month == 12)//大月
                   {
                       date1.day = 31;
                   }
                   else if (date1.month == 4 || date1.month == 6 || date1.month == 9 || date1.month == 11)//小月
                   {
                       date1.day = 30;
                   }
                   else if (date1.month == 0)
                   {
                       date1.month = 12;
                       date1.day = 31;
                       date1.year--;
                   }

               }
           }       


       } //把日期减到0估计就对了吧????????????????         

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

       return date1;//减法的直接返回即可。
    }

    date1.day = days;

    return date1;
}

int CCnDays::GetDaysOfMonth(int year, int month)
{
    //返回year年中month月的天数。

    if (IsLeapYear(year) && month == 1)
    {
        return DaysOfMonth[month] + 1;
    }

    return DaysOfMonth[month];
}

来自:https://blog.csdn.net/syrchina/article/details/8538516
来自:https://wenku.baidu.com/view/9f81b036f424ccbff121dd36a32d7375a517c67b.html

公历农历互转C/C++的实现

Alt

带尺寸的图片: Alt

居中的图片: Alt

居中并且带尺寸的图片: Alt

当然,我们为了让用户更加便捷,我们增加了图片拖拽功能。

如何插入一段漂亮的代码片

博客设置页面,选择一款你喜欢的代码片高亮样式,下面展示同样高亮的 代码片.

// An highlighted block
var foo = 'bar';

生成一个适合你的列表

  • 项目
    • 项目
      • 项目
  1. 项目1
  2. 项目2
  3. 项目3
  • 计划任务
  • 完成任务

创建一个表格

一个简单的表格是这么创建的:

项目Value
电脑$1600
手机$12
导管$1

设定内容居中、居左、居右

使用:---------:居中
使用:----------居左
使用----------:居右

第一列第二列第三列
第一列文本居中第二列文本居右第三列文本居左

SmartyPants

SmartyPants将ASCII标点字符转换为“智能”印刷标点HTML实体。例如:

TYPEASCIIHTML
Single backticks'Isn't this fun?'‘Isn’t this fun?’
Quotes"Isn't this fun?"“Isn’t this fun?”
Dashes-- is en-dash, --- is em-dash– is en-dash, — is em-dash

创建一个自定义列表

Markdown
Text-to- HTML conversion tool
Authors
John
Luke

如何创建一个注脚

一个具有注脚的文本。1

注释也是必不可少的

Markdown将文本转换为 HTML

KaTeX数学公式

您可以使用渲染LaTeX数学表达式 KaTeX:

Gamma公式展示 Γ ( n ) = ( n − 1 ) ! ∀ n ∈ N \Gamma(n) = (n-1)!\quad\forall n\in\mathbb N Γ(n)=(n1)!nN 是通过欧拉积分

Γ ( z ) = ∫ 0 ∞ t z − 1 e − t d t   . \Gamma(z) = \int_0^\infty t^{z-1}e^{-t}dt\,. Γ(z)=0tz1etdt.

你可以找到更多关于的信息 LaTeX 数学表达式here.

新的甘特图功能,丰富你的文章

Mon 06 Mon 13 Mon 20 已完成 进行中 计划一 计划二 现有任务 Adding GANTT diagram functionality to mermaid
  • 关于 甘特图 语法,参考 这儿,

UML 图表

可以使用UML图表进行渲染。 Mermaid. 例如下面产生的一个序列图:

张三 李四 王五 你好!李四, 最近怎么样? 你最近怎么样,王五? 我很好,谢谢! 我很好,谢谢! 李四想了很长时间, 文字太长了 不适合放在一行. 打量着王五... 很好... 王五, 你怎么样? 张三 李四 王五

这将产生一个流程图。:

链接
长方形
圆角长方形
菱形
  • 关于 Mermaid 语法,参考 这儿,

FLowchart流程图

我们依旧会支持flowchart的流程图:

Created with Raphaël 2.3.0 开始 我的操作 确认? 结束 yes no
  • 关于 Flowchart流程图 语法,参考 这儿.

导出与导入

导出

如果你想尝试使用此编辑器, 你可以在此篇文章任意编辑。当你完成了一篇文章的写作, 在上方工具栏找到 文章导出 ,生成一个.md文件或者.html文件进行本地保存。

导入

如果你想加载一篇你写过的.md文件,在上方工具栏可以选择导入功能进行对应扩展名的文件导入,
继续你的创作。


  1. 注脚的解释 ↩︎

  • 7
    点赞
  • 44
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
以下是C语言实现阳历农历代码: ```c #include <stdio.h> int lunar_year(int year); int lunar_month(int year, int month); int lunar_day(int year, int month, int day); void lunar_calendar(int year, int month, int day); int main() { int year, month, day; printf("请输入阳历日期(年 月 日,用空格隔开):"); scanf("%d%d%d", &year, &month, &day); lunar_calendar(year, month, day); return 0; } int lunar_year(int year) // 判断该年是否为闰年,是返回1,否返回0 { return (year % 4 == 0 && year % 100 != 0) || year % 400 == 0; } int lunar_month(int year, int month) // 返回该年该月的天数 { int month_day[13] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; if (month == 2 && lunar_year(year)) // 若为闰年且为2月,则天数为29天 return 29; else return month_day[month]; } int lunar_day(int year, int month, int day) // 返回这一天为该年的第几天 { int i, days = 0; for (i = 1; i < month; i++) days += lunar_month(year, i); days += day; return days; } void lunar_calendar(int year, int month, int day) { int i, days = 0, lunar_year, lunar_month, lunar_day; int lunar_month_day[13][2] = { {0, 0}, {29, 30}, {59, 60}, {88, 89}, {118, 119}, {147, 148}, {177, 178}, {206, 207}, {236, 237}, {265, 266}, {295, 296}, {324, 325}, {354, 355} }; // 农历每月初一对应的阳历日期 int lunar_year_days[12] = {0, 354, 355, 383, 354, 355, 384, 354, 355, 383, 354, 355}; // 每年农历的总天数 days = lunar_day(year, month, day); for (i = 1900; days > 0; i++) { // 从1900年开始计算 if (days > 365 + lunar_year(i)) { // 若跨年,则减去该年的天数 days -= 365 + lunar_year(i); } else { lunar_year = i; for (lunar_month = 1; lunar_month <= 12; lunar_month++) { // 计算该年的月份和日期 if (days <= lunar_month_day[lunar_month][lunar_year_days[lunar_year % 12]]) { lunar_day = days + lunar_month_day[lunar_month - 1][lunar_year_days[lunar_year % 12]]; break; } } break; } } printf("农历日期:%d年", lunar_year); if (lunar_month < 10) printf("0"); printf("%d月", lunar_month); if (lunar_day < 10) printf("0"); printf("%d日\n", lunar_day); } ``` 实现过程分为三个函数: - `lunar_year(year)`:判断该年是否为闰年,是返回1,否返回0。 - `lunar_month(year, month)`:返回该年该月的天数。 - `lunar_day(year, month, day)`:返回这一天为该年的第几天。 根据这三个函数可以计算出农历日期。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值