Android 日历开发教程[五]

农历计算类

农历计算的算法,来源于:http://sean.o4u.com/ap/calendar/,具体的代码基本与来源处的 javascript 相同,差不多只是语言上的转换而已。

将这个类命名为:LunarCalendar,放到包 module 下,具体的代码就不列出了,这里帖一下 public 成员:


  • 字段概要

    字段
    限定符和类型字段和说明
    static longDAY_MILLIS
    一天的毫秒数
    static longLUNAR_BASE_MILLIS
    农历1900-1-1 的公历毫秒数(与公历1970-1-1的偏移值)
    static intLUNAR_DAY
    农历日字段
    static intLUNAR_IS_LEAP
    农历是否为闰月字段
    static intLUNAR_MONTH
    农历月字段
    static intLUNAR_YEAR
    农历年字段
  • 方法概要

    方法
    限定符和类型方法和说明
    intgetGregorianDate(int field)
    返回公历信息
    参照: Calendar.get(int)
    intgetGregorianFestival()
    返回当前的公历节日序号,从0开始,如果不是公历节日,返回-1
    intgetLunar(int field)
    获取农历信息
    intgetLunarFestival()
    返回当前的农历节日序号,从0开始,如果不是农历节日,返回-1
    static intgetMaxYear()
    支持范围最大年份
    static intgetMinYear()
    支持范围最小年份
    static intgetSolarTerm(int year, int index)
    取得二十四节气
    longgetTimeInMillis()
    booleanisToday()
    是否为今天
    java.lang.StringtoString()


农历信息文本显示类

农历计算类返回的信息都是数字,需要转换成相应的字符,为此创建 DateFormatter 类,也同样保存到包 module 下。这个类不保存字符串,所有的字符串都放在资源文件 res/string.xml 中,各项定义成 string array。下面是这个类的代码片段:

	private Resources resources;

	public DateFormatter(Resources resources) {
		this.resources = resources;
	}

	private String getArrayString(int resid, int index) {
		return resources.getStringArray(resid)[index];
	}

	public CharSequence getDayName(LunarCalendar lc) {
		StringBuilder result = new StringBuilder();
		int day = lc.getLunar(LunarCalendar.LUNAR_DAY);
		if (day < 11) {
			result.append(getArrayString(R.array.chinesePrefix, 0));
			result.append(getArrayString(R.array.chineseDigital, day));
		} else if (day < 20) {
			result.append(getArrayString(R.array.chinesePrefix, 1));
			result.append(getArrayString(R.array.chineseDigital, day - 10));
		} else if (day == 20) {
			result.append(getArrayString(R.array.chineseDigital, 2));
			result.append(getArrayString(R.array.chineseDigital, 10));
		} else if (day < 30) {
			result.append(getArrayString(R.array.chinesePrefix, 2));
			result.append(getArrayString(R.array.chineseDigital, day - 20));
		} else {
			result.append(getArrayString(R.array.chineseDigital, 3));
			result.append(getArrayString(R.array.chineseDigital, 10));
		}

		return result;
	}

代码比较简单,不作具体说明。


----------------------------

代码的重构刚完成,不过却有点问题,主要是 Cell 的背景,原来是用 selector -> shape,现在改为 shape -> color selector,得到焦点时不能更换背景色,待查。

代码的说明暂停,先放出 Project 的完整包文件下载:http://download.csdn.net/detail/mostone/4955556


[待续]


  • 4
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值