您的位置:首页 > 移动开发 > Android开发

Android 日历开发教程[五]

2013-01-03 21:47 495 查看
农历计算类

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

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

字段概要

字段

限定符和类型字段和说明
static long
DAY_MILLIS

一天的毫秒数
static long
LUNAR_BASE_MILLIS

农历1900-1-1 的公历毫秒数(与公历1970-1-1的偏移值)
static int
LUNAR_DAY

农历日字段
static int
LUNAR_IS_LEAP

农历是否为闰月字段
static int
LUNAR_MONTH

农历月字段
static int
LUNAR_YEAR

农历年字段

构造器概要

构造器

构造器和说明
LunarCalendar()
LunarCalendar(java.util.Calendar date)
LunarCalendar(java.util.Date date)
LunarCalendar(long milliSeconds)

方法概要

方法

限定符和类型方法和说明
int
getGregorianDate(int field)

返回公历信息

参照:
Calendar.get(int)

int
getGregorianFestival()

返回当前的公历节日序号,从0开始,如果不是公历节日,返回-1
int
getLunar(int field)

获取农历信息
int
getLunarFestival()

返回当前的农历节日序号,从0开始,如果不是农历节日,返回-1
static int
getMaxYear()

支持范围最大年份
static int
getMinYear()

支持范围最小年份
static int
getSolarTerm(int year, int index)

取得二十四节气
long
getTimeInMillis()
boolean
isToday()

是否为今天
java.lang.String
toString()
农历信息文本显示类

农历计算类返回的信息都是数字,需要转换成相应的字符,为此创建 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

[待续]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: