万年历
万年历原理
万年历原理
万年历是一种可以显示任意日期的日历,它的原理是基于天文学和数学的结合。
在古代,人们通过观察太阳、月亮和星星的运行轨迹来制作日历,但这种日历只能粗略地预测日期,无法准确地显示每一天的日期。
直到公元前2世纪,罗马天文学家克劳迪乌斯·托勒密提出了一种新的日历系统,通过观察太阳的运行轨迹,他设计出了一种可以显示每一天日期的日历,这就是我们今天所使用的万年历。
万年历的原理基于太阳和月亮的运行轨迹。
太阳的运行轨迹是365.25天,而月亮的运行轨迹是29.53天。
通过这两者的结合,我们可以设计出一种可以精确显示
日期的日历系统。
在万年历中,将365天分为12个月,每个月的天数不同,通过
这种方式可以准确地显示每一天的日期。
除了太阳和月亮的运行轨迹外,万年历还考虑了闰年和闰月的影响。
由于太阳
的运行轨迹是365.25天,所以每隔4年我们就需要增加一天来弥补这个差距,这
就是闰年的概念。
而月亮的运行轨迹是29.53天,所以每隔一段时间我们也需要增
加一个月来弥补这个差距,这就是闰月的概念。
通过考虑闰年和闰月的影响,万年历可以精确地显示每一天的日期。
总的来说,万年历的原理是基于天文学和数学的结合,通过观察太阳和月亮的
运行轨迹,考虑闰年和闰月的影响,设计出一种可以精确显示日期的日历系统。
万年历不仅可以帮助人们记录时间,还可以帮助人们了解天文学的知识,是人类文明发展的重要成果。
多功能万年历
多功能万年历
多功能万年历是一种具备多种功能的日历,通常有以下一些功能:
1.日期显示:显示当天的日期,包括年、月、日。
2.星期显示:显示当天是星期几,以方便用户了解当天是工作日还是休息日。
3.节日显示:显示当天是否是法定假日或其他特殊节日,方便用户安排假期和活动。
4.天气预报:提供当天和未来几天的天气预报信息,包括温度、天气状况等。
5.闹钟功能:设定定时提醒,例如设置起床、约会、会议等提醒功能。
6.备忘录功能:用户可记录重要事项、待办事项或个人计划,方便提醒和管理。
7.世界时间:提供不同地区的时间显示,方便用户进行跨时区的日常生活或商务往来。
8.农历显示:提供农历日期和相关的农历节日信息。
9.计算器功能:提供基本的数学计算功能,方便用户进行简单的计算。
10.记事功能:允许用户在具体日期上添加个人的文字和图
片备注,记录和分享生活中的点滴。
这些功能可以单独存在于一个软件或硬件设备中,也可以
集成在智能手机、平板电脑、智能手表等多种智能设备中。
多功能万年历的目的是方便用户管理时间、记录重要的日
程安排和提醒,提供更便捷的生活服务。
中华万年历全部记事
中华万年历全部记事1.引言1.1 概述中华万年历是中国传统历法的一种,历史悠久,起源可以追溯到古代的夏朝时期。
它记录了中华民族漫长的历史和文化传承,承载着丰富的记事内容。
中华万年历以天干地支纪年和十二地支纪月为主要方式,结合节气、传统节日等重要节点,系统地记录了中国人民的重要事件、农历、天文气象等信息。
中华万年历的特点之一是其独有的天干地支纪年系统。
天干地支是中国古代对时间的纪录方法,将时间按照十天干(甲、乙、丙、丁、戊、己、庚、辛、壬、癸)和十二地支(子、丑、寅、卯、辰、巳、午、未、申、酉、戌、亥)排列组合而成。
这种纪年方法的使用可以追溯到两千多年前的春秋战国时期,至今仍然在中国日常生活中广泛使用。
此外,中华万年历还包含了许多重要的记事内容和分类。
其中包括历史事件、政治演变、文化传承、人物事迹等方面的记载。
通过这些记事内容的呈现,我们可以更加全面地了解中国的历史和文化。
同时,中华万年历还将重要的节气和传统节日纳入其中,为我们提供了关于农历、天文气象等方面的信息。
这些内容的记录和分类不仅为后人研究历史提供了重要的参考,也对于了解中国人民的生活方式、宗教信仰和传统习俗具有重要意义。
综上所述,中华万年历作为中国传统历法的重要组成部分,在历史和文化方面具有重要的地位和价值。
它的起源和发展、记事内容和分类等方面的研究,对于我们更好地理解中国的历史和文化具有重要的意义。
同时,我们也应该加强对中华万年历的传承和保护,使其成为中华民族宝贵的文化遗产。
1.2 文章结构文章结构可以帮助读者更好地理解和组织文章的内容。
本文的结构主要分为引言、正文和结论三个部分。
引言部分主要包括概述、文章结构和目的。
概述部分介绍了中华万年历全部记事的主题和背景,引起读者对该话题的兴趣。
文章结构部分则对整篇文章的结构进行了说明,让读者能够清楚地了解接下来的内容安排。
目的部分阐明了撰写这篇文章的目的,即介绍中华万年历的全部记事,强调其历史和文化的重要性。
万年历 原理
万年历原理
万年历是一种用于显示、计算和查询特定年月日的工具,它能够提供公历和农历的信息。
万年历的原理基于公历的周期性和农历的干支纪年。
公历是以太阳为基础的阳历,按照地球绕太阳的运行情况划分年、月、日。
公历的基本单位是日,一年有365天或366天。
万年历通过公历的周期性来计算和显示特定年份的日历。
农历是以月亮为基础的阴历,按照月亮围绕地球的运行情况划分年、月、日。
农历的基本单位是月,一年有12个月,每个月的天数不固定。
农历还使用干支纪年来表示年份,以十天干和十二地支的组合来表示每一年。
干支纪年的周期是60年,被称为“甲子”。
在万年历中,公历和农历的信息通过计算和推算来显示出来。
公历的日历部分通过考虑闰年和每个月的天数来显示,而农历的计算则涉及到复杂的数学和天文学知识。
通过计算公历和农历的相对关系,万年历能够提供公历和农历的对应日期。
万年历还可以通过查询特定年份的数据来显示出该年的重要日期,例如节假日、节气等。
这些日期可以通过万年历的预置表格或相应的算法来得到。
综上所述,万年历的原理是基于公历和农历的周期性,并通过计算和查询来显示和计算特定年份的日期信息。
2023年万年历-日历表
January1月日一二三四五六1234567元旦十一十二十三小寒十五十六891011121314十七三九十九二十廿一廿二廿三15161718192021廿四廿五廿六四九廿八大寒除夕22232425262728春节初二初三初四初五五九初七293031初八初九初十May5月日一二三四五六123456劳动节十三十四青年节十六立夏78910111213十八十九二十廿一廿二廿三廿四14151617181920母亲节廿六廿七廿八廿九四月初二21222324252627小满初四初五初六初七初八初九28293031初十十一十二十三September9月日一二三四五六12十七十八3456789十九二十廿一廿二廿三白露廿五10111213141516教师节廿七廿八廿九三十八月初二17181920212223初三初四初五初六初七初八秋分24252627282930初十十一十二十三十四中秋节十六3月April4月三四五六日一二三四五1234初十十一十二九九891011234567妇女节十八十九二十十二十三十四清明节十六十七1516171891011121314廿四廿五廿六廿七十九二十廿一廿二廿三廿四22232425161718192021二月初二初三初四廿六廿七廿八廿九谷雨初二293031232425262728初八初九初十初四初五初六初七初八初九30十一7月August8月三四五六日一二三四五11234建党节建军节十六十七十八567867891011十八十九二十廿一二十廿一立秋廿三末伏廿五12131415131415161718廿五廿六廿七廿八廿七廿八廿九七月初二初三19202122202122232425初二初三中伏初五初五初六七夕节处暑初九初十262728292728293031初九初十十一十二十二十三十四中元节十六11月December12月三四五六日一二三四五12341十八十九二十廿一十九8910113456784月六1愚人节8十八15廿五22初三29初十8月六5十九12廿六19初四26十一12月六2二十9廿七16初四23十一30十八。
万年历原理
万年历原理
万年历是一种用来记录和显示日期的工具,它可以帮助人们方便地查看某一年、某一月或某一日的具体日期信息。
万年历的原理是基于公历的规律和历法计算。
公历是目前世界上最普遍使用的阳历,它采用太阳年和太阳日来计算时间。
太阳年的长度约为365.2425天,太阳日则是地
球绕太阳一周所需的时间。
然而,公历中规定的一年只有365天,为了弥补年与日之间的差距,每4年中会多出一个闰日,这一年就是闰年。
具体闰年的计算方法为:能被4整除但不能被100整除,或者能被400整除的年份都是闰年。
万年历的原理就是根据公历的规则计算某一天、某一月的具体日期,并配以星期的显示。
其中,星期的计算需要通过已知的起始日期和当天的天数差来确定,通常采用桥年法或詹森公式。
除了公历的基本原理,万年历还需要考虑其他因素,如月份的天数和每个月的起始日等。
一种广泛使用的万年历算法是蔡勒公式,它可以计算任意日期的星期、月份和日期。
根据这个算法,我们可以确定某一天是星期几,从而将日期显示在万年历上。
总之,万年历的原理是基于公历的规律和历法计算,它能够准确地显示任意日期的具体信息,帮助人们更方便地管理时间和安排日程。
记事万年历
节日安排
2021年
1月
元旦节 1月1日 节日安排....
日一二三四五六
春节 2月12日 节日安排....
27 28 29 30 31 1 2
情人节 2月14日
3456789
元宵节 2月26日
10 11 12 13 14 15 16
妇女节 3月8日
17 18 19 20 21 22 23
9 10 11 12 13 14 15
国庆节 10月1日 节日安排....
16 17 18 19 20 21 22
23 24 25 26 27 28 29
爸爸生
日 妈妈生 日 老婆生
日 老公生
日 儿子生 日 女儿生 日 ....
重要日子安排 3月6日 生日安排.... 4月8日 生日安排.... 7月16日 生日安排.... 8月12日 生日安排.... 9月15日 生日安排.... 11月8日 生日安排....
30 31 1 2 3 4 5
2021年
9月
日一二三四五六
29 30 31 1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 1 2
3456789
2021年
2月
日一二三四五六
31 1 2 3 4 5 6
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
1234567
2021年
万年历是什么
万年历是什么万年历是中国古代传说中最古老的一部太阳历。
万年历是记录一定时间范围内(比如100年或更多)的具体阳历与阴历的日期的年历,方便有需要的人查询使用。
万年只是一种象征,表示时间跨度大。
[1]所使用的万年历,即包括若干年或适用于若干年的历书[2]。
现代的万年历能同时显示公历、农历和干支历等多套历法,更能包含黄历相关吉凶宜忌、节假日、提醒等多种功能信息,极为方便人们查询使用。
中文名万年历外文名perpetual calendar解释适用于很多年的历书属性是一种历书,不是一种历法功能黄历宜忌,节日,阳历,阴历,日期快速导航择日宜忌阳历与阴历万年历App在线万年历转换方法干支年历歌诀历史传说相传,在很久以前,有个名叫万年的青年,看到当时节令很乱,想把节令定准。
一天,他上山砍柴,坐在树阴下休息,树影的移动启发了他,他设计了一个测日影计天时的晷仪。
可是,天阴雨雾,影响测量。
后来,山崖上的滴泉引起了他的兴趣,他又动手做了一个五层漏壶。
天长日久,他发现每隔三百六十多天,天时的长短就会重复一遍。
当时的国君叫祖乙,天气风云的不测,使他很苦恼。
一个名叫阿衡的大臣,为讨好皇上,奏称要设天台敬祭天神。
祖乙认为有理,便带领百官去祭天,却无济于事。
万年知道后,忍不住就带着日晷和漏壶去见皇上,对祖乙讲清了日月运行的道理。
祖乙听后龙颜大悦,感到有道理。
于是把万年留下,在天坛前修建日月阁,筑起日晷台和漏壶亭。
并派了十二个童子服侍万年。
祖乙对万年说:"希望你能测准日月规律,推算出准确的晨夕时间,创建历法,为天下的黎民百姓造福。
"有一次,祖乙传旨要阿衡去了解万年测试历法的进展情况。
当他登上日月坛时,看见天坛边的石壁上刻着:日出日落三百六周而复始从头来。
草木枯荣分四时,一岁月有十二圆。
阿衡见此,知道万年的历法已研究成功,心中忐忑不安。
他万分惧怕万年因创建历法而得宠,国君会怪罪自己提出祭祀天神的主意。
于是,他阴谋策划,派了一个刺客去除掉万年。
万年历的计算公式
万年历的计算公式
日期的计算 例子 确定2049年10月1日(100周年国庆)为星期几,用Zeller 公式进行计算,过程如下: w=y+[y/4]+[c/4]-2c+[26(m+1)/10]+d-1 =49+[49/4]+[20/4]-2×20+[26×(10+1)/10]+1-1 =49+[12.25]+5-40+[28.6] =49+12+5-40+28 =54 (除以7余5) Zeller公式只适合1582年10月15日后的情形
万年历的计算公式
常识 平年365天(52周+1天),闰年366天(52周+2天)
平年2月28天,闰年2月29天
每400年一闰,或非百年年份每4年一闰
地球绕太阳一周的时间为365天5小时48分46秒, 规定一年365天,余下的时间,积累起来,4年共23 小时15分4秒,将近一天,把这一天加在某年的2月 而成29天,该年称为闰年,其他年份为平年。但4年 加1天又多用了44分56秒,这个数积满400年为3天。 因此400年中只能有97个闰年
ቤተ መጻሕፍቲ ባይዱ
万年历的计算公式
日期计算公式 Zeller公式 某日是星期几?关于这个问题,有很多计算公式(两 个通用计算公式和一些分段计算公式),其中最著名 的是Zeller公式: w=y+[y/4]+[c/4]-2c+[26(m+1)/10]+d-1 w:星期;c:世纪-1;y:年份(两位数);m:月份 (3≤m≤14,即在Zeller中,某年的1、2月要看作上一年 的13、14月,比如2003年1月1日要看作2002年的13月 1日);d:日数。 算出来的W除以7,余数是几就是星期几
万年历口诀
2007-09-11 08:57万年历是一种将公历、农历、干支历相互对应,编排在一起的历学工具书。
查用万年历,主要是使用年历中的干支纪时。
干支纪时是我国独创的历史最悠久的历法。
它以天象为依据,符合物候特点,体现了五行旺衰。
在诸多学科中,有着其它历法不可替代的作用。
干支纪时,在中医、气功、周易数术、农作、历法等领域中:有着特殊的实用价值。
每当需用干支纪时,而需用者手中没有万年历的时候,往往束手无策。
,只需记住十四字的歌诀,一年中的干支纪时就可迅速算出。
这种快速心算万年历的方法,叫“银盘子”,“银盘子”是民间术士创造的万年历速算法,历史悠久,以往采用师徒间口授方法传授,严禁外传,我们在此将“银盘子”合盘端出,公诸於世,以进一步探讨揭秘。
“银盘子”是以农历为基础,推算干支纪时的方法。
农历有大月、小月之分,大月30天,小月29天。
如果不考虑小月因素,农历两个月60天,与一个甲子六十组干支数目相符,即每两个月可重合一个甲子。
按照这样一个规律,知道了某年的正月初一的日干支,就等于知道了三月初一,五月初一,七月初一,九月初一,十一月初一的日干支,这几个月的初一的日干支,应是相同的(有闰月者,月分稍有变化)因为农历中存在小月,只要知道某年有几个小月,其分别为哪几个月,所推日期经历了几个小月,干支纪日顺延几天就是了,这样心算干支纪日就变得十分简单了。
心算万年历,必须了解以下四个要点:。
(1)该年岁次;(2)正月初一的日干支;(3)立春的日、时;(4)当年几个小月,分别为哪几个月。
“银盘子”仅用了十四个字的歌诀,便将以上四个问题圆满地解决了。
“银盘子”的创造者,为了保守秘密,在编制口诀时,采用了“加密术”,即对同一地支,往往采用多种称谓。
这样做,一是提供了多一些的音韵,使编出的歌诀押韵。
而更主要的是为这种心算法采取了“加密”。
同一地支众多称谓,变换使用,即便外人听到也不得其解。
“银盘子”不但对地支称谓进行了加密处理,为了便于记忆,控制歌诀字数,还设置了一些相关月份的简称。
全功能万年历
全功能万年历全功能万年历是一款非常实用的工具,可以进行日期查询、节日提醒、倒计时等多种功能。
无论是在日常生活中还是工作中,它都能帮助我们更好地管理时间和安排活动。
首先,全功能万年历可以方便地进行日期查询。
不论是过去还是未来,只需输入想要查询的日期,它就能立即告诉我们对应的星期、公历和农历日期。
这对工作生活中对时间安排要求较高的人来说十分有用,可以帮助他们提前进行时间安排,避免错过重要的会议或活动。
其次,全功能万年历还能提供多种节日的提醒功能。
它内置了各种节日,例如春节、元旦、勤劳节等等。
在节日来临之前,它会提前给予提醒,让人们可以提前筹备庆祝活动或者安排假期。
这对于常常忙碌的人来说非常方便,可以提醒他们重要的节日,让他们在工作之余也能体验到节日的快乐氛围。
此外,全功能万年历还具备倒计时功能。
无论是等待一场盛大的演出、一个重要的考试还是一个特别的日子,只需输入相关的时间和日期,它就可以准确地告诉我们离目标还有多少天、多少小时、多少分钟。
这对于那些时间意识强烈的人来说非常有帮助,可以帮助他们更好地安排时间,控制当前任务,迎接倒计时结束的那一刻。
最后,全功能万年历还具备天气查询功能。
它可以根据用户所在的地理位置,提供准确的实时天气情况和未来几天的天气预报。
这对于需要准备出门的人来说非常方便,可以根据天气情况选择合适的衣物和交通方式,避免在外面受到恶劣天气的困扰。
总而言之,全功能万年历是一款非常实用的工具,它能够帮助我们进行日期查询、节日提醒、倒计时等多种功能。
无论在日常生活还是工作中,我们都可以利用它更好地管理时间、安排活动,确保我们的生活更加有序和高效。
希望未来的万年历还能继续创新,为我们的生活带来更多便利和乐趣。
民用万年历
民用万年历
民用万年历是一种重要的日历工具,它包含了自然界、历史文化
以及社会生活等多方面的信息。
通过民用万年历,我们不仅可以了解
节气、节日、黄历等方面的知识,还可以掌握到一些有趣的历史故事、人物传记、民俗习惯等等。
同时,民用万年历也可以用于日常生活中
的查询、安排和纪念等方面,如查询某一天的黄历信息,安排节假日
的旅游计划,纪念自己和朋友的生日等等。
现在,随着科技的进步和智能化的发展,民用万年历也已经在不
断地升级和改进,可以通过手机、平板等电子设备随时随地进行查询
和使用。
这样,我们不仅可以更方便地使用万年历,也能够更好地保
护环境,节约资源。
总之,民用万年历既是一种文化遗产,也是现代生活的必备工具。
它为我们提供了一个更加全面、方便的了解世界和规划生活的途径。
中华万年历版本大全
中华万年历版本大全
中华万年历,是中国传统的一种历法,历经千年不衰。
它记录了中国人民的传统节日、农历、节气等重要信息,是中国传统文化的重要组成部分。
在不同的历史时期,中华万年历也有着不同的版本,每个版本都承载着特定的历史文化内涵,具有独特的价值。
首先,我们来看一下《太初历》。
《太初历》是中国古代的一种历法,最早见于《尚书·禹贡》。
它以十天为一周,每天分为十二时辰。
《太初历》在古代有着广泛的应用,成为了中国古代的主要历法之一。
其次,我们介绍一下《大明历》。
《大明历》是明朝时期的一种历法,由郑栅编纂。
《大明历》在中国历史上有着重要的地位,它不仅在当时得到广泛应用,而且对后世的历法研究产生了深远的影响。
再者,我们来看看《康熙历》。
《康熙历》是清朝康熙年间颁布的一种历法,由徐祯编纂。
《康熙历》在中国历史上也有着重要的地位,它在当时得到了广泛的应用,并且对后世的历法研究产生了一定的影响。
最后,我们介绍一下《中华民国历法》。
《中华民国历法》是中华民国时期颁布的一种历法,它是中国历史上的一个重要时期,在这个时期,中国历法也发生了一些变化。
《中华民国历法》在当时得到了广泛的应用,成为了中国历史上的一个重要的历法版本。
总的来说,中华万年历版本众多,每个版本都有着其独特的历史文化内涵,具有重要的历史价值。
通过对这些版本的了解,不仅可以更好地了解中国传统文化,而且可以更好地了解中国历法的发展历程,从而更好地传承和发扬中国传统文化。
希望我们能够更加重视和研究中华万年历,让这一宝贵的历史文化遗产得到更好的传承和发展。
中华万年历大全
中华万年历大全中华万年历是中国传统文化中的重要组成部分,它记录了中国几千年的历史、文化和传统。
作为一个历法体系,中华万年历包括了农历、公历、节气、节日等内容,是中国人民日常生活中不可或缺的一部分。
本文将为您详细介绍中华万年历的相关知识,希望能够帮助您更好地了解和传承中国传统文化。
首先,我们来介绍一下中华万年历中的农历。
农历是中国传统的历法体系,它以月相周期为基础,与农业生产和日常生活息息相关。
农历中包括了24节气,每个节气都代表着不同的气候变化和农事活动,如立春、谷雨、小满等。
农历还包括了各种传统节日,如春节、清明节、中秋节等,这些节日都承载着丰富的文化内涵和历史意义。
其次,我们要介绍的是中华万年历中的公历。
公历是以太阳在地球上的视运动为基础的历法体系,它是现代社会中广泛使用的历法标准。
公历以一年365天为周期,分为12个月,每个月的天数不等。
公历中的重要节日有元旦、劳动节、国庆节等,这些节日都是现代社会中人们共同的纪念和庆祝对象。
除了农历和公历,中华万年历还包括了节气和节日。
节气是指地球绕太阳运行时,太阳直射地球的位置,它与气候变化和农事活动密切相关。
中华万年历中共有24个节气,每个节气都有其独特的意义和传统习俗。
节日则是人们在特定日期举行的庆祝活动,它们代表着不同的文化传统和历史记忆,是中华民族的文化瑰宝。
在中华万年历中,每一个日期都有其独特的意义和价值。
人们可以通过中华万年历来了解每一天的节气、节日,从而更好地感受和传承中国传统文化。
同时,中华万年历也为人们的生活提供了重要的参考信息,帮助人们合理安排生活和工作。
总而言之,中华万年历是中国传统文化的重要组成部分,它记录了中国几千年的历史、文化和传统。
通过了解中华万年历,我们可以更好地感受和传承中国传统文化,同时也可以为自己的生活提供重要的参考信息。
希望本文所介绍的内容能够帮助您更好地了解和利用中华万年历,感受中国传统文化的魅力。
可以无限使用的万年历
万年历是一种为人们提供日期、节假日、公历信息等服务的日历工具,其普及程度深受人们的欢迎,无论是家庭、办公室还是工厂都有不少用户
使用它来管理日常事务。
无限使用的万年历采用了先进的技术,提供高度灵活、实用的功能,
可以让用户更加轻松地安排和管理自己的日程安排。
万年历可以显示不同
日期的固定节日和自定义节日,让用户不会忘记最重要的节日;可以提醒
用户各种事务和重要日期,提高用户工作和日程安排的效率;可以记录当
日和每日的活动,方便查询;具有多种日程视图,更方便用户管理自己的
日程安排;可以实现出差日历和家庭日历的同步,让用户同时能够跟踪双
方的日程安排。
无限使用的万年历不仅满足了广大用户的日程安排需求,还支持可扩
展的模块,用户可以根据自己的需求来调整和增添相关的功能,用户可以
灵活地使用万年历管理自己的日常事务,同时还可以提高用户的生活质量。
无限使用的万年历不仅拥有强大的功能,还拥有简洁的界面,让用户操作
更加轻松便捷,同时又具有出色的用户体验。
无限使用的万年历可以帮助用户更好地管理自己的日常事务,更好地
安排和管理自己的日程安排。
标准中西对照万年历
标准中西对照万年历
万年历,顾名思义,就是可以使用很长时间的历法。
在不同的文化中,人们使
用的历法各有不同,其中中西方的历法是最为广泛使用的两种。
中西方的历法有很多不同之处,比如纪年方式、节气名称、节日习俗等等。
在这篇文档中,我们将对比中西方的标准万年历,以便更好地了解不同文化的历法。
首先,我们来看看中西方的纪年方式。
在中国,人们使用农历进行纪年,而在
西方,则是使用公历。
农历是根据农业季节和月相变化来制定的,而公历则是以太阳的运行周期为基础。
因此,农历和公历的纪年方式有着本质的差异。
在农历中,每一年都有一个生肖代表,而在公历中,则是使用数字来表示年份。
其次,我们来看看中西方的节气名称。
在中国,人们使用24节气来标志一年
的变化,比如立春、清明、立夏等等。
而在西方,人们则更加注重四季的变化,比如春分、夏至、秋分、冬至等。
这些节气名称反映了不同文化对自然变化的关注点和理解方式。
再者,我们来比较一下中西方的节日习俗。
在中国,人们有着丰富多彩的传统
节日,比如春节、端午节、中秋节等等。
而在西方,人们则更加重视基督教的节日,比如圣诞节、复活节等。
这些节日习俗反映了不同文化的宗教信仰和历史传统。
总的来说,中西方的标准万年历有着诸多差异,这些差异反映了不同文化对时
间和自然的理解方式。
通过对比中西方的万年历,我们可以更好地了解不同文化的特点和传统习俗,促进文化交流和理解。
希望这篇文档能够帮助大家更好地了解中西方的历法差异,增进跨文化交流和理解。
万年历(任意年份哦)
07
12
13
14
19
20
21
26
27
28
02
03
备注:
星期四
01 08 15 22 29
星期五
02 09 16 23 30
星期六
03 10 17 24 31
星期日
04 11 18 25 01
14
15
16
21
22
23
28
01
02
07
08
备注:
星期四
03 10 17 24 03
星期五
04 11 18 25 04
星期六
05 12 19 26 05
星期日
06 13 20 27 06
2022 3月
星期一
28
星期二
01
星期三
02
07
08
09
14
15
16
21
22
23
28
29
30
04
05
备注:
星期四
2022 6月
星期一
30
星期二
31
星期三
01
06
07
08
13
14
15
20
21
22
27
28
29
04
05
备注:
星期四
02 09 16 23 30
星期五
03 10 17 24 01
星期六
04 11 18 25 02
星期日
05 12 19 26 03
2022 7月
星期一
27
星期二
28
星期三
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
程序设计综合实践报告(C语言)项目名称:桌面万年历班级:信息与计算2010级1班姓名:郭玉豪学号:201001051506山东科技大学信息科学与工程学院2012年12月目录1. 项目概述 (3)1.1 需求陈述 (3)1.2 开发技术、环境与工具 (3)2. 软件需求 (4)2.1 功能性需求 (4)3. 软件架构设计 (4)4. 软件详细设计与实现 (5)4.1 主要模块的流程图 (5)4.2 核心代码 (5)5 总结与体会 (21)5.1遇到的问题与解决途径 (21)5.2 心得体会 (22)1. 项目概述1.1 需求陈述本项目是桌面时钟与万年历的实现,时钟可以实现年月日、时分秒、天干地支及生肖的输出,并且还能显示阴历的日期。
右击时钟会选中日历会出现日历的输出。
日历上显示今天阳历的年月日、阴历的年月日、干支年,生肖及图片,并且右边还有年和月的加减,点击今日按钮时间就立刻转的电脑本地的日期。
日历本身显现阳历与阴历,和国家法定节假日。
在日历的右上角有个取消按钮。
为了增加日历的外观,增加了换肤按钮,使得本万年历更加人性化。
1.2 开发技术、环境与工具1.2.1(DrawClockText)此函数给出了表盘的的年月日与时分秒、干支年和生效年的输出调用。
1.2.2(DrawCalendar)此函数是日历表的输出函数,它实现了日历表的输出阳历时间和阴历时间,生肖与干支年的输出。
1.2.3(用到的API函数)API函数参考:GetLocalTime: 获得当前时间(公历:年、月、日、周);MoveToEx: 移动划线的起点;LineTo: 绘制到某一点;SetTextColor: 设置要绘制的文字颜色;TextOut: 绘制文字;GetLocalTime:获得当前系统的本地时间;结构体类型参考:SYSTEMTIME: 描述时间类型,包括年月日、时分秒、周;系统调用:根据已给样本的提示,绘制了日历的矩形背景,并且也根据公历日期来计算出农历日期,并且标注了一些重要节日,像“春节、元宵节、国庆节、端午节、中秋节”等一些重要的节日,并且将节假日的字体颜色设置为红色,然后又写了获取当前系统本机时间的函数,成功的获得了当前本机的时间,这在日历中就可以观察到。
1.2.4本程序是在基于c语言下实现的,用到的工具就是microsoft visual studio 2008。
2. 软件需求2.1 功能性需求2.1.1void SunToLunar(const stDateTime* pSunDay,stDateTime* pLunarDay)此调用函数实现了将一个公立日期转为一个阴历日期,目前此函数还有一些错误。
2.1.2int GetDayOfWeek(const stDateTime* pSunDay)此函数将一个阳历日期输进去,判断这一天为星期几,然后返回一个整型数据。
2.1.3void DrawCalendar (HDC hDC)此函数是是日历表的输出,标出了当天时间,并且在每天下都对应着当天的阴历时间。
2.1.4void CalendarButtonEvent(UINT nID)此函数实现了日历的年份和月份按钮的增加或者减少。
2.1.5void DrawClockText(HDC hDC)此函数实现了表盘的输出,年月日时分秒,生效年,干支年,星期几。
3. 软件架构设计设计该万年历建了一个项目CalendarApp,该项目下有个头文件,源文件,资源文件,源文件中包括主程序main.c以及被调用的程序,资源文件中包括设置的万年历的外观,按钮设置……。
该软件调用外部图片,图片在image中。
在日期设置上:(1)根据公历日期获得农历日期,调用判断是不是闰年的函数,把一年中的农历所有月份的天数分为四类(28,29,30,31)。
(2)用FOR循环输出各月份的日历,并把周末的字体设为红色。
其余为黑色。
(3)在钟表上获得当前本地的系统时间。
(5)显示出星期、天干地支及农历日期。
详细设计过程:1、首先绘制日历的矩形背景,用CreateSolidBrush(函数做出矩形的背景颜色,在日历的上端和下端分别输出阳历的年月份,及阴历的天干地支年等。
2、判断农历的每月有多少天,调用判断是否为闰年的函数,若为闰年,则定义二月为29天,通过一switch 函数输出十二个月的天数。
3、调用公历转为农历的函数并用for循环获得每日的农历日期,并调用CreateSolidBrush(函数标出当天的日期,并设置了五个法定节假日提醒。
4、对日历上的几个按钮进行设置,使得当年月份发生改变时,日历表可以正常显示。
5、获得本地系统时间,在表盘上的正确位置输出当天的年月日(调用CreateFont函数按角度输出)及当地时间和星期。
6、用指针数组存放十二个月的英文和星期的英文缩写。
4. 软件详细设计与实现4.1 主要模块的流程图流程图为阳历和阴历的转换过程示意图。
4.2 核心代码#include"public.h"/********************************************************** API函数参考:GetLocalTime: 获得当前时间(公历:年、月、日、周)MoveToEx: 移动划线的起点LineTo: 绘制到某一点SetTextColor: 设置要绘制的文字颜色TextOut: 绘制文字GetLocalTime:获得当前系统的本地时间结构体类型参考:SYSTEMTIME: 描述时间类型,包括年月日、时分秒、周**********************************************************/HINSTANCE g_hInst;//保存操作系统传递进来的"应用程序实例句柄"typedef struct _stDateTime{int nYear;int nMonth;int nDay;}stDateTime;//定义表格,存储年-2099年的农历信息:每年的大小月、闰月信息、春节所在的公历日期unsigned int LunarCalendarTable[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,0x6AD53C,/*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*/};char* TianGanDizhi[60]={"甲子", "乙丑","丙寅","丁卯","戊辰","已巳","庚午","辛未","壬申","癸酉","甲戌","乙亥","丙子","丁丑","戊寅","已卯","庚辰","辛巳","壬午","癸未","甲申","乙酉","丙戌","丁亥","戊子","已丑","庚寅","辛卯","壬辰","癸巳","甲午","乙未","丙申","丁酉","戊戌","已亥","庚子","辛丑","壬寅","癸卯","甲辰","乙巳","丙午","丁未","戊申","已酉","庚戌","辛亥","壬子","癸丑","甲寅","乙卯","丙辰","丁巳","戊午","已未","庚申","辛酉","壬戌","癸亥"};char *ShengXiao[]={"鼠","牛","虎","兔","龙","蛇","马","羊","猴","鸡","犬","猪"};char *DayTable[] ={"*","初一","初二","初三","初四","初五","初六","初七","初八","初九","初十","十一","十二","十三","十四","十五","十六","十七","十八","十九","二十","廿一","廿二","廿三","廿四","廿五","廿六","廿七","廿八","廿九","三十"};char *WeekTable[] ={"星期天","星期一","星期二","星期三","星期四","星期五","星期六"};char *MonthTable[] = {"*","正","二","三","四","五","六","七","八","九","十","十一","腊"};int Days[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};//定义表格,存储每月日离元旦的天数(不考虑瑞年)unsigned int MonthAdd[12] = {0,31,59,90,120,151,181,212,243,273,304,334};//定义用户要显示的年、月、日unsigned int nCurrentYear=0;unsigned int nCurrentMonth=0;unsigned int nCurrentDay=0;int count = 1; //控制背景图片、HBITMAP hBkmap;//得到图片//判断某年是否为公历瑞年int IsLeapYear(WORD iYear){//错误已更正if(((iYear%4 == 0)&&(iYear%100 != 0))||(iYear%400 == 0))return 1;elsereturn 0;}//公历日期转农历日期的函数void SunToLunar(const stDateTime* pSunDay,stDateTime* pLunarDay){int i=0;int SunDiff=0;int SpringDiff=0;int nSpringYear=pSunDay->nYear;int nSpringMonth=1;int nSpringDay=0;//计算当前公历日离当年元旦的天数SunDiff = MonthAdd[pSunDay->nMonth-1] + pSunDay->nDay - 1;if(IsLeapYear(pSunDay->nYear) && (pSunDay->nMonth > 2) )//若是闰年且大于月,天数再加SunDiff++;//计算春节所在公历日离元旦的天数:通过查表,计算当年的春节所在的公历日期,if(((LunarCalendarTable[pSunDay->nYear - 1901] & 0x60)>>5)==1)//若春节在公历月SpringDiff= (LunarCalendarTable[pSunDay->nYear-1901]&0x1F)-1;else//若春节在公历月SpringDiff= (LunarCalendarTable[pSunDay->nYear-1901]&0x1F)-1+31;//SunDiff和SpringDiff的差就是当前公历日离春节的天数if(SunDiff>SpringDiff)//公历日在春节后{int x = SunDiff - SpringDiff;int bLunar = (LunarCalendarTable[nSpringYear - 1901] & 0xF00000)>>20;//闰月月份i=0;nSpringMonth=1;for(;;){int a = (LunarCalendarTable[pSunDay->nYear-1901] & (0x80000>>i))>>(19-i);//计算大小月if(a==0)a=29;elsea=30;if(x<a)break;x =x - a;i++;nSpringMonth++;}nSpringDay =x+1;//如果有闰月if(nSpringMonth>bLunar && bLunar>0)nSpringMonth--;}else if(SunDiff<SpringDiff)//公历日在春节前{int x = SpringDiff-SunDiff;int nShift=0;int Shift=0;int bLunar = (LunarCalendarTable[nSpringYear - 1901-1] & 0xF00000)>>20;//闰月月份i=0;nSpringYear--;//需要上一年的农历信息nSpringMonth=12;//从最后一个月开始计算if (bLunar == 0)//如果没有闰月{nShift = 0x100;Shift=8;}else{nShift = 0x80;Shift=7;}for(;;){int a = (LunarCalendarTable[nSpringYear-1901] & (nShift<<i))>>(Shift+i);//计算大小月if(a==0)a=29;elsea=30;if(x<=a){x = a-x;break;}x =x - a;i++;nSpringMonth--;}nSpringDay =x+1;if(nSpringMonth<bLunar && bLunar>0)nSpringMonth++;}else {nSpringMonth= 1;nSpringDay = 1;}pLunarDay->nYear = nSpringYear;pLunarDay->nMonth= nSpringMonth;pLunarDay->nDay = nSpringDay;}//根据公历日期获得星期int GetDayOfWeek(const stDateTime* pSunDay){//根据泰勒公式//nWeek = [nYear1÷] - 2*nYear1 + nYear2 + [nYear2÷] + [26(nMonth+1)÷] + nDay - 1 int nWeek=0;int nYear1=pSunDay->nYear/100;//年的前两位数字int nYear2=pSunDay->nYear%100;//年的后两位数字int nDay=pSunDay->nDay; //公立日int nMonth=pSunDay->nMonth;//公立月数,所求的月份如果是月或月,//则应视为上一年的月或月,//也就是公式中nMonth的取值范围是从到而不是从到if(nMonth==1 || nMonth==2){nMonth=12+nMonth;nYear1=(pSunDay->nYear-1)/100;//年的前两位数字nYear2=(pSunDay->nYear-1)%100;//年的后两位数字}nWeek = nYear1/4 - 2*nYear1 + nYear2 + nYear2/4 + (26*(nMonth+1))/10 + nDay - 1;if(nWeek >= 0)nWeek = nWeek%7;//else{nWeek = nWeek%7;nWeek += 7;}return nWeek;}//根据公立年得到农历干支年char* GetGanZhi(int nYear){return TianGanDizhi[nYear%60-4];}//根据公立年得到农历生肖char* GetShengXiao(int nYear){int judge = (nYear%60-3-1)%12;return (judge >= 0) ? ShengXiao[judge]:ShengXiao[judge+12];}int GetShengXiaoID(int nYear){int judge = (nYear%60-3-1)%12;return (judge >= 0) ? judge:judge+12;}//Windows程序入口函数int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd ) {g_hInst = hInstance;ShowClockDlg();}//日历绘制函数,学员自己实现该函数void DrawCalendar(HDC hDC,int nWidth,int nHeight){SYSTEMTIME datetime;int week, i, j = 67, k = 0, days, init;int a, b, c;//记录阴历年、月、日char tttt[100];HDC hdcMem;HBITMAP hbmp;BITMAP bmp;HBRUSH hbrush;HPEN hpen;RECT rc;stDateTime sundate,lunardate,sundate_today;GetLocalTime(&datetime);//获取当前时间sundate_today.nDay=datetime.wDay;sundate_today.nMonth=datetime.wMonth;sundate_today.nYear=datetime.wYear;SunToLunar(&sundate_today.nYear,&lunardate);//阳历转阴历i=lunardate.nYear;//(阴)年j=lunardate.nMonth;//(阴)月k=lunardate.nDay;//(阴)日//--------------------绘制窗体背景,加载背景图片-----------------------------// (count > 12) ? (count = 1): count;hdcMem = CreateCompatibleDC(hDC);wsprintf(tttt,"../image/skin/%d.bmp",count);hdcMem=CreateCompatibleDC(hDC);hbmp = (HBITMAP)LoadImage(g_hInst,tttt ,IMAGE_BITMAP,600,500,LR_LOADFROMFILE);GetObject(hbmp, sizeof(BITMAP), &bmp);SelectObject(hdcMem,hbmp);BitBlt(hDC, 0, 0, bmp.bmWidth, bmp.bmHeight, hdcMem, 0, 0, SRCCOPY);DeleteObject(hbmp);//-----------------------输出阳历当日日期---------------------------------------// hpen=GetStockObject(DEFAULT_GUI_FONT);SelectObject(hDC,hpen);SetTextColor(hDC,RGB(250,0,0));wsprintf(tttt,"今天是%d-%d-%d",datetime.wYear,datetime.wMonth,datetime.wDay);TextOut(hDC,100,30,tttt,strlen(tttt));//----------------------输出阴历当日日期----------------------------------------// wsprintf(tttt,"农历%s月%s日",MonthTable[j], DayTable[k]);TextOut(hDC,300,30,tttt,strlen(tttt));//----------------------输出天干地支及生肖----------------------------------------// wsprintf(tttt,"%s%s年",GetGanZhi(i),GetShengXiao(i));TextOut(hDC,15,30,tttt,strlen(tttt));TextOut(hDC,550,282,"年",2);TextOut(hDC,550,310,"月",2);if(nCurrentYear == 0)//如果还没设定当前时间{nCurrentDay=datetime.wDay;nCurrentMonth=datetime.wMonth;nCurrentYear=datetime.wYear;}sundate.nDay=nCurrentDay;sundate.nMonth=nCurrentMonth;sundate.nYear=nCurrentYear;week = GetDayOfWeek(&sundate);SunToLunar(&sundate,&lunardate);//阳历转阴历i=lunardate.nYear;//(阴)年j=lunardate.nMonth;//(阴)月k=lunardate.nDay;//(阴)日//设置日历表变化年hpen=(HPEN)CreateFont(15,10,0,0,9,FALSE,FALSE,FALSE,DEFAULT_CHARSET,OUT_CHARACTER_PRECIS,CLIP_DEFAULT_ PRECIS,DEFAULT_QUALITY,DEFAULT_PITCH,"黑体");SelectObject(hDC,hpen);SetTextColor(hDC,RGB(250,0,0));//颜色设置wsprintf(tttt,"%d",sundate.nYear);TextOut(hDC,500,280,tttt,strlen(tttt));hpen=GetStockObject(DEFAULT_GUI_FONT);SelectObject(hDC,hpen);//设置日历表变化月hpen=(HPEN)CreateFont(15,10,0,0,9,FALSE,FALSE,FALSE,DEFAULT_CHARSET,OUT_CHARACTER_PRECIS,CLIP_DEFAULT_ PRECIS,DEFAULT_QUALITY,DEFAULT_PITCH,"黑体");SelectObject(hDC,hpen);SetTextColor(hDC,RGB(250,0,0));//颜色设置wsprintf(tttt,"%d",sundate.nMonth);(strlen(tttt)==1) ? TextOut(hDC,525,305,tttt,strlen(tttt)):TextOut(hDC,525,305,tttt,strlen(tttt));//--------------------输出日历表--------------------------------------------//hpen=(HPEN)CreateFont(15,8,0,0,9,FALSE,FALSE,FALSE,DEFAULT_CHARSET,OUT_CHARACTER_PRECIS,CLIP_DEFAULT_P RECIS,DEFAULT_QUALITY,DEFAULT_PITCH,"黑体");SelectObject(hDC,hpen);SetTextColor(hDC,RGB(120,120,0));//设置日历字体颜色sundate.nDay=1;week = GetDayOfWeek(&sundate);days = Days[nCurrentMonth];//当月有多少天init = 58;i = (week-1)*67+init;j = 105;(week == 0) ? (j = j-50):j;//如果第一天为星期天for(k = 1;k<=days;k++)//核心算法{SetTextColor(hDC,RGB(255,0,0));//设置星期天颜色sundate.nDay=k;sundate.nMonth =nCurrentMonth;sundate.nYear=nCurrentYear;SunToLunar(&sundate,&lunardate);//阳历转阴历a=lunardate.nYear;//(阴)年b=lunardate.nMonth;//(阴)月c=lunardate.nDay;//(阴)日i = i+67;if((week+k-1)%7==0)//每过一星期换行{j = j+50;i = init;}if(k==datetime.wDay && nCurrentYear==datetime.wYear&& nCurrentMonth==datetime.wMonth)//背景色标注当前日期 {SetRect (&rc,i-28,j-10, i+38, j+40);hbrush=CreateSolidBrush(RGB(250,0,0));FillRect(hDC,&rc,hbrush);}SetTextColor(hDC,RGB(250,0,0));//节日颜色if(sundate.nMonth==1&&sundate.nDay==1)//法定节假日{TextOut(hDC,i-10,j,"元旦",4);}else if(sundate.nMonth==10&&sundate.nDay==1){TextOut(hDC,i-18,j,"国庆节",6);}else{if((week+k-1)%7==0 || (week+k-1)%7==6)SetTextColor(hDC,RGB( 255, 0, 0));//公立日期颜色(周六周天颜色特殊) elseSetTextColor(hDC,RGB( 0, 64, 0));wsprintf(tttt, "%d", k);//显示公历TextOut(hDC,i, j,tttt,strlen(tttt));}//显示农历SetTextColor(hDC,RGB(250,0,0));//节日颜色if(b==1&&c==1){TextOut(hDC,i-10,j+20,"春节",4);//农历节日显示}else if(b==1&&c==15){TextOut(hDC,i-18,j+20,"元宵节",6);//农历节日显示}else if(b==5&&c==5){TextOut(hDC,i-18,j+20,"端午节",6);//农历节日显示}else if(b==8&&c==15){TextOut(hDC,i-18,j+20,"中秋节",6);//农历节日显示}else if(c == 1)//每月一号显示当前月,否则显示日期{SetTextColor(hDC,RGB(200,0,50));//阴历日期颜色(月份)wsprintf(tttt, "%s月", MonthTable[b]);//输出阴历时间(月份)TextOut(hDC,i-10, j+20,tttt,strlen(tttt));}else{SetTextColor(hDC,RGB(0,128,255));//阴历日期颜色wsprintf(tttt, "%s", DayTable[c]);TextOut(hDC,i-10, j+20,tttt,strlen(tttt));}hdcMem= CreateCompatibleDC(hDC);//通过光栅运算消除底色switch((nCurrentYear-4)%12){case 0:hBkmap = (HBITMAP)LoadImage(g_hInst,"../Image/shengxiao/1.bmp",IMAGE_BITMAP,50,50,LR_LOADFROMFILE);break;case 1:hBkmap = (HBITMAP)LoadImage(g_hInst,"../Image/shengxiao/2.bmp",IMAGE_BITMAP,50,50,LR_LOADFROMFILE);break;case 2:hBkmap = (HBITMAP)LoadImage(g_hInst,"../Image/shengxiao/3.bmp",IMAGE_BITMAP,50,50,LR_LOADFROMFILE);break;case 3:hBkmap = (HBITMAP)LoadImage(g_hInst,"../Image/shengxiao/4.bmp",IMAGE_BITMAP,50,50,LR_LOADFROMFILE);break;case 4:hBkmap = (HBITMAP)LoadImage(g_hInst,"../Image/shengxiao/5.bmp",IMAGE_BITMAP,50,50,LR_LOADFROMFILE);break;case 5:hBkmap = (HBITMAP)LoadImage(g_hInst,"../Image/shengxiao/6.bmp",IMAGE_BITMAP,50,50,LR_LOADFROMFILE);break;case 6:hBkmap = (HBITMAP)LoadImage(g_hInst,"../Image/shengxiao/7.bmp",IMAGE_BITMAP,50,50,LR_LOADFROMFILE);break;case 7:hBkmap = (HBITMAP)LoadImage(g_hInst,"../Image/shengxiao/8.bmp",IMAGE_BITMAP,50,50,LR_LOADFROMFILE);break;case 8:hBkmap = (HBITMAP)LoadImage(g_hInst,"../Image/shengxiao/9.bmp",IMAGE_BITMAP,50,50,LR_LOADFROMFILE);break;case 9:hBkmap = (HBITMAP)LoadImage(g_hInst,"../Image/shengxiao/10.bmp",IMAGE_BITMAP,50,50,LR_LOADFROMFILE);break;case 10:hBkmap = (HBITMAP)LoadImage(g_hInst,"../Image/shengxiao/11.bmp",IMAGE_BITMAP,50,50,LR_LOADFROMFILE);break;case 11:hBkmap = (HBITMAP)LoadImage(g_hInst,"../Image/shengxiao/12.bmp",IMAGE_BITMAP,50,50,LR_LOADFROMFILE);break;}SelectObject(hdcMem,hBkmap);BitBlt(hDC,500,350,100,100,hdcMem,-10,-10,SRCCOPY);}hpen = CreatePen(PS_SOLID, 2, RGB(100,100,100));//设置画笔SelectObject(hDC, hpen);//为设备环境配置画笔//画框架for(i = 95; i < 400; i += 50)//画横线{MoveToEx (hDC, 30, i, NULL);LineTo (hDC, 498, i);}for(i = 30; i < 500;i += 67)//画竖线{MoveToEx (hDC, i, 95, NULL);LineTo (hDC, i, 395);}//输出文字j = 70;hpen=(HPEN)CreateFont(12,5,0,0,4,FALSE,FALSE,FALSE,DEFAULT_CHARSET,OUT_CHARACTER_PRECIS,CLIP_DEFAULT_P RECIS,DEFAULT_QUALITY,DEFAULT_PITCH,"黑体");hpen=GetStockObject(DEFAULT_GUI_FONT);SelectObject(hDC,hpen);SetTextColor(hDC,RGB(255,255,0));TextOut(hDC,35,76,"星期日",6);TextOut(hDC,35+j,76,"星期一",6);TextOut(hDC,35+2*j,76,"星期二",6);TextOut(hDC,35+3*j,76,"星期三",6);TextOut(hDC,35+4*j,76,"星期四",6);TextOut(hDC,35+5*j,76,"星期五",6);TextOut(hDC,35+6*j,76,"星期六",6);}//事件函数:点击日历界面上各个按钮后被调用,学员自己实现该函数//注意:该函数调用完后,系统自动调用DrawCalendar函数// 因此,可以理解为,该函数和DrawCalendar函数是联动的void CalendarButtonEvent(UINT nID){if(nID==IDC_BTN_YEARUP)//点击了"年↑"按钮nCurrentYear++;}else if(nID==IDC_BTN_YEARDOWN)//点击了"年↓"按钮{nCurrentYear--;}if(nID==IDC_BTN_MONTHUP)//点击了"月↑"按钮{if(nCurrentMonth==12){nCurrentYear++;nCurrentMonth=1;}else{nCurrentMonth++;}}else if(nID==IDC_BTN_MONTHDOWN)//点击了"月↓"按钮{if(nCurrentMonth==1){nCurrentYear--;nCurrentMonth=12;}else{nCurrentMonth--;}}else if(nID==IDC_BTN_SKIN){//绘制窗体背景,加载背景图片count++;}if(nID==IDC_BTN_TODAY)//今天的按钮{SYSTEMTIME DateTime;GetLocalTime(&DateTime);nCurrentMonth=DateTime.wMonth;nCurrentYear=DateTime.wYear;nCurrentDay=DateTime.wDay;}//...}//--------------------输出表盘信息--------------------------------------------// void DrawWeek(HDC hDC,int week)//输出表盘的星期{HFONT newFont;int x=35,y=36;newFont=CreateFont(10,9,0,0,0,0,0,0,DEFAULT_CHARSET,OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY,DEFAULT_PITCH | FF_DONTCARE,NULL);SelectObject(hDC,newFont);switch(week){case 0:TextOut(hDC,x,y,TEXT("星期日"),6);break;case 1:TextOut(hDC,x,y,TEXT("星期一"),6);break;case 2:TextOut(hDC,x,y,TEXT("星期二"),6);break;case 3:TextOut(hDC,x,y,TEXT("星期三"),6);break;case 4:TextOut(hDC,x,y,TEXT("星期四"),6);break;case 5:TextOut(hDC,x,y,TEXT("星期五"),6);break;default:TextOut(hDC,x,y,TEXT("星期六"),6);break;}}void DrawGanZhi(HDC hDC,int year)//输出表盘的天干地支{char *ch;TCHAR szBuffer[12];ch=GetGanZhi(year);wsprintf(szBuffer,"%s",ch);SetTextColor(hDC,RGB(2,128,0));//文字颜色TextOut(hDC,34,72,szBuffer,4);//输出年份TextOut(hDC,73,73,TEXT("年"),2);}void DrawLunar(HDC hDC) //输出表盘的阳历、阴历日期{TCHAR szBuffer[21];SYSTEMTIME DateTime;stDateTime SunDay,LunarDay;GetLocalTime(&DateTime);SunDay.nYear= DateTime.wYear;SunDay.nMonth= DateTime.wMonth;SunDay.nDay =DateTime.wDay;SunToLunar(&SunDay,&LunarDay);wsprintf(szBuffer,"%s月%s",MonthTable[LunarDay.nMonth],DayTable[LunarDay.nDay]);SetTextColor(hDC,RGB(255,0,0));//文字颜色if(LunarDay.nMonth==11)TextOut(hDC,20,90,szBuffer,4);TextOut(hDC,30,90,szBuffer,8);}//该函数每.5秒被调用一次,时钟界面上的文字绘制,学员自己实现该函数void DrawClockText(HDC hDC)//表盘函数调用{SYSTEMTIME DateTime;//获得当前系统的本地时间int week=0,year=0;GetLocalTime(&DateTime);week=DateTime.wDayOfWeek;year=DateTime.wYear;SetTextColor(hDC,RGB(200,200,2));//设置星期颜色DrawWeek(hDC,week);DrawGanZhi(hDC,year);DrawLunar( hDC);}5 总结与体会5.1遇到的问题与解决途径5.1.1 (问题:日历表的阳历日期在有的月输出时正确,有的月就输出到表格外面以及有的月份初一显示为*)解决方法:问题是出现在计算日期输出时出现了个bug,在跟同学探讨后,经老师指点,修正后,问题就解决啦。