由于生活和工作的原因,“寿星天文历”我一直没有动,长时间的丢弃后,当重新拾起时,比较费劲。编程就是这样,思维的火花只在当初的那一瞬,一旦熄灭,重新再点燃断掉的思维是很困难的。因为人的“忘记”能力,真的是挺强的,有时回顾或维护以前的代码时,常常会感叹道:这是我写的吗?够牛逼,看不懂!呵呵,这时候注释的作用的凸显出来了,尽管如此有时仅仅靠注释找以前的思路也是很困难。
跑题了,那么,首先对于等着“寿星天文历”封装整理版代码的各位,说声抱歉。这回整理的代码,修复了部分小bug和线程安全问题,同时整理的结构更易于理解,并与寿星天文历的JS原版代码的结构保持一致,以方便各位阅读和理解,本来想把变量的命名方式与JS原版一致的,但最后还是没有这么做,原因是是在看不惯JS源码的变量命名方式。注释上都有与原版变量名称的对应说明,各位想理解源码或继续完善的,就麻烦自己对照着看吧。
本次的封装版,实质上还是较为简单,没有进一步深入和挖掘,但也基本够用了。各位读者可以根据自己的需要进行进一步整理,不过再整理和改造之前,建议还是先了解下相关的知识,否则估计你都无从下手,即便改了,在不了解逻辑的情况下,也容易出错。
说明:
1. LunarCalendar对象是以月历为基准的,例如:2014年8月的月历数据。
2. LunarCalendar的所有方法都是针对于农历而言,例如getMonth方法,代表获取的是农历月的数据,而不是公历。
3. LunarCalendar实例化,默认为今天,可以指定为某天,大多数方法都是依据实例化时指定的天而返回数据的。
4. LunarDate类,是某一天的农历数据对象,并且已经拆分,而不是以前那样都混杂在一块。
5. JulianDate类,是公历数据对象。
6. LunarConstant类,是基本常量的数据对象,里面含有大量基本数据。
由于代码很多,所以我以文件的形式上传到了CSDN资源库里,博文里就不贴了。
Java源码下载地址:
http://download.csdn.net/detail/wangpeng047/7755661
测试代码:
package com.test;import org.junit.Test;import com.util.DateStyle;
import com.util.DateUtil;
import com.util.LunarCalendar;public class TestLunarCalender {@Testpublic void test () {
// String dateStr = "2015-2-4";
// LunarCalendar calendar = new LunarCalendar(DateUtil.stringToDate(dateStr, DateStyle.YYYY_MM_DD));LunarCalendar calendar = new LunarCalendar();System.out.println("getAnimalString=" + calendar.getAnimalString());System.out.println("getDateString=" + calendar.getDateString());System.out.println("getDay=" + calendar.getDay());System.out.println("getDayString=" + calendar.getDayString());System.out.println("getGanZhiDateString=" + calendar.getGanZhiDateString());System.out.println("getMaxDayInMonth=" + calendar.getMaxDayInMonth());System.out.println("getMonth=" + calendar.getMonth());System.out.println("getMonthString=" + calendar.getMonthString());System.out.println("getYear=" + calendar.getYear());System.out.println("getYearString=" + calendar.getYearString());String[] strs = calendar.getAllSolarTerm();for (String str : strs) {System.out.println(str);}}
}