农历日历 v1.0.4
载入中...
搜索中...
未找到
CalendarLunar.cpp
1
6#include "CalendarLunar.h"
7#include <QDate>
8#include <QDebug>
9#include <QTime>
10#include "LunarTable.h"
11#include "sxtwl.h"
12
13// 天干地支: https://baike.baidu.com/item/%E5%A4%A9%E5%B9%B2%E5%9C%B0%E6%94%AF/278140
14// 天干地支纪年法: https://zhuanlan.zhihu.com/p/616094910
15
16static const QString g_Gan[] = {"甲", "乙", "丙", "丁", "戊", "己", "庚", "辛", "壬", "癸"};
17static const QString g_Zhi[] = {"子", "丑", "寅", "卯", "辰", "巳", "午", "未", "申", "酉", "戌", "亥"};
18static const QString g_ShX[] = {"鼠", "牛", "虎", "兔", "龙", "蛇", "马", "羊", "猴", "鸡", "狗", "猪"};
19static const QString g_numCn[] = {"零", "一", "二", "三", "四", "五",
20 "六", "七", "八", "九", "十"}; //中文数字
21static const QString g_jqmc[] = {"冬至", "小寒", "大寒", "立春",
22 "雨水", "惊蛰", "春分", "清明",
23 "谷雨", "立夏", "小满", "芒种",
24 "夏至", "小暑", "大暑", "立秋",
25 "处暑", "白露", "秋分", "寒露",
26 "霜降", "立冬", "小雪", "大雪"};
27static const QString g_jqImage[] = {"DongZhi", "XiaoHan", "DaHan", "LiChun",
28 "YuShui", "JingZhe", "ChunFen", "QingMing",
29 "GuYu", "LiXia", "XiaoMan", "MangZhong",
30 "XiaZhi", "XiaShu", "DaShu", "LiQiu",
31 "ChuShu", "BaiLu", "Qiufeng", "HanLu",
32 "ShungJiang", "LiDong", "XiaoXue", "DaXue"};
33static const QString g_ymc[] = { "正", "二", "三", "四", "五", "六", "七", "八", "九", "十","十一", "十二"}; //月名称,建寅
34static const QString g_rmc[] = {"初一", "初二", "初三", "初四", "初五", "初六",
35 "初七", "初八", "初九", "初十", "十一", "十二",
36 "十三", "十四", "十五", "十六", "十七", "十八",
37 "十九", "廿", "廿一", "廿二", "廿三", "廿四",
38 "廿五", "廿六", "廿七", "廿八", "廿九", "卅", "卅一"};
39static const QString g_WeekCn[] = {"星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六"};
40
41CCalendarLunar::CCalendarLunar(QObject *parent) : QObject(parent)
42{}
43
44CCalendarLunar::CCalendarLunar(QDate date, QObject *parent) : CCalendarLunar(parent)
45{
46 if(date.isValid())
47 {
48 GetLunar(date);
49 }
50}
51
53{
54 return m_Year;
55}
56
58{
59 return m_Month;
60}
61
63{
64 return m_Day;
65}
66
67int CCalendarLunar::GetLunar(const QDate &date)
68{
69 if(!date.isValid())
70 return -1;
71
72 m_Solar = date;
74 int nRet = CLunarTable::Instance()->GetLunar(date, day);
75 if(nRet)
76 return -2;
77
78 m_Year = day.nYear;
79 m_Month = day.nMonth;
80 m_Day = day.nDay;
81
82 m_szLunar = g_Gan[day.nTg] + g_Zhi[day.nDz] + "年";
83 if (day.bLeap)
84 m_szLunar += "闰" + g_ymc[day.nMonth - 1] + "月" + g_rmc[day.nDay - 1] + "日";
85 else
86 m_szLunar += g_ymc[day.nMonth - 1] + "月" + g_rmc[day.nDay -1] + "日";
87
88 if(1 == day.nDay)
89 {
90 if (day.bLeap)
91 m_szLunarDay += "闰" + g_ymc[day.nMonth - 1] + "月";
92 else
93 m_szLunarDay = g_ymc[day.nMonth - 1] + "月";
94 } else
95 m_szLunarDay = g_rmc[day.nDay - 1];
96
97 if(-1 != day.nJq)
98 {
99 m_szJieQi = g_jqmc[day.nJq];
100 m_szImageJieQi = ":/image/" + g_jqImage[day.nJq];
101 }
102
103 return 0;
104}
105
107{
108 return m_szLunar;
109}
110
112{
113 return m_szLunarDay;
114}
115
117{
118 return m_szJieQi;
119}
120
122{
123 return m_szImageJieQi;
124}
125
126QDate CCalendarLunar::GetSolar(int lunarYear, int lunarMonth, int lunarDay, bool isLeap)
127{
128 QSharedPointer<Day> day(sxtwl::fromLunar(lunarYear, lunarMonth, lunarDay, isLeap));
129 return QDate(day->getSolarYear(), day->getSolarMonth(), day->getSolarDay());
130}
QString GetLunarDay()
得到指定日期的农历当月的第几天(汉字)
QString GetLunar()
得到指定日期的农历(汉字)
int GetDay()
得到指定日期的农历天数
static QDate GetSolar(int lunarYear, int lunarMonth, int lunarDay, bool bLeap=false)
得到指定农历的阳历
QString GetJieQi()
得到节气
int GetMonth()
得到指定日期的农历月份
int GetYear()
得到指定日期的农历年份
QString GetJieQiImage()
得到节气的图片
int GetLunar(const QDate &date, _LUNAR_DAY &lunar, bool cache=true)
得到指定日期的农历