您的位置:首页 > 其它

Limo_Os_桌面开发_加入农历_教程

2011-01-13 09:20 204 查看
------------------20110113-B---------------------

更新10.B:

优化了农历。计算的日期从原来的3年提升到120年。

优化了输出,以前的每秒更新25次到现在一分钟更新一次。比以前流畅了很多。

注意:启动后,日历要在一分钟左右才能显示。





------------------20100112-A---------------------

话说一直想把桌面加上个农历。也好让这个纯进口手机有个体面的中国像。

说干就干,现在回想起来,真是一波三折。

在网上下载了一个flash 转换农历的类:淘沙农历。

改成Taoshaw_data.as,放到和fla文件同级的目录中。

在桌面源码中建立一个名字为clock,导出为clock的影片。

在nowplus\app\activityview\avview.as里面,出入如下代码:

clockmc= getContainer().attachMovie("clock","clock_mc",2);

在clock影片中,输入as代码:

var my_dushu = new Array(7.500000E-001, -5.000000E-001, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
onEnterFrame = function ()
{
var _loc1 = new Taoshaw_data();
_loc1 = new Date();
var _loc7 = new Array();
_loc7 = ["星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六"];
var _loc10 = new Array();
_loc10 = ["1月", "2月", "3月", "4月", "5月", "6月", "7月", "8月", "9月", "10月", "11月", "12月"];
var _loc9 = new Array();
_loc9 = ["正月", "二月", "三月", "四月", "五月", "六月", "七月", "八月", "九月", "十月", "十一月", "十二月"];
var _loc8 = new Array();
_loc8 = ["初一", "初二", "初三", "初四", "初五", "初六", "初七", "初八", "初九", "初十", "十一", "十二", "十三", "十四", "十五", "十六", "十七", "十八", "十九", "二十", "廿一", "廿二", "廿三", "廿四", "廿五", "廿六", "廿七", "廿八", "廿九", "三十"];
var _loc3 = _loc1.getDate();
var _loc4 = _loc1.getSeconds();
var _loc6 = _loc1.getMinutes();
if (_loc6 < 10)
{
_loc6 = "0" + _loc6;
} // end if
if (_loc4 < 10)
{
_loc4 = "0" + _loc4;
} // end if
a = _loc7[_loc1.getDay()];
b = _loc1.getHours() + ":" + _loc6 + ":" + _loc4;
c = _loc1.getFullYear() + "年" + _loc10[_loc1.getMonth()] + _loc3 + "日";
d = _loc1.getTaoJNianZhu() + "年" + _loc9[_loc1.getTaoJMonth() - 1] + _loc8[_loc1.getTaoJDay() - 1];
f = _loc1.test + "*" + _loc1.cmonth + "*" +_loc1.cday ;
var _loc2 = _loc1.getJieQi();
var _loc5 = "";
if (length(_loc2) > 0)
{
_loc2 = "今日" + _loc2;
}
else
{
_loc2 = "";
} // end else if
if (_loc1.getMonth() == 0 && _loc3 == 1)
{
_loc2 = "欢度元旦";
} // end if
if (_loc1.getMonth() == 4 && _loc3 == 1)
{
_loc2 = "欢度五一";
} // end if
if (_loc1.getMonth() == 9 && _loc3 == 1)
{
_loc2 = "欢度国庆";
} // end if
if (_loc1.getTaoJMonth() == 1 && _loc1.getTaoJDay() == 1)
{
_loc5 = "欢度春节";
} // end if
if (_loc1.getTaoJMonth() == 5 && _loc1.getTaoJDay() == 5)
{
_loc5 = "欢度端午";
} // end if
if (_loc1.getTaoJMonth() == 8 && _loc1.getTaoJDay() == 15)
{
_loc5 = "欢度中秋";
} // end if
_loc2 = _loc2 + _loc5;
e = _loc2;
};

跑起来后,发现在电脑上可以正常运作,在手机上却运行不了。

获取的时候为1899年。月和日都无法正常获取。

奇怪了。调试了半天,发现两个问题:

1、手机上的flash 播放器,对于Taoshaw_data.as这个类,无法直接继承至Date这个系统类。晕~~

2、手机上,只能计算不到100天的毫秒,那么计算天数用的Date.UTC(1900, 0, 31),压根就计算不了。

解决方法:

1、fla源码中,创建一个date的实例“时间”,所有通过_loc1调用的date函数,全部改成通过“时间”调用。

2、在类中,创建一个date的实例“mydate”,所有通过_loc1调用的date函数,全部改成通过“mydate”调用。

3、自己写一个行数,计算离1900年1月1日的时间差别。(抛弃原来的毫秒算法,直接用天数计算)

fla源码改成:

var my_dushu = new Array(7.500000E-001, -5.000000E-001, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
onEnterFrame = function ()
{
var _loc1 = new Taoshaw_data();
时间 = new Date();
var _loc7 = new Array();
_loc7 = ["星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六"];
var _loc10 = new Array();
_loc10 = ["1月", "2月", "3月", "4月", "5月", "6月", "7月", "8月", "9月", "10月", "11月", "12月"];
var _loc9 = new Array();
_loc9 = ["正月", "二月", "三月", "四月", "五月", "六月", "七月", "八月", "九月", "十月", "十一月", "十二月"];
var _loc8 = new Array();
_loc8 = ["初一", "初二", "初三", "初四", "初五", "初六", "初七", "初八", "初九", "初十", "十一", "十二", "十三", "十四", "十五", "十六", "十七", "十八", "十九", "二十", "廿一", "廿二", "廿三", "廿四", "廿五", "廿六", "廿七", "廿八", "廿九", "三十"];
var _loc3 = 时间.getDate();
var _loc4 = 时间.getSeconds();
var _loc6 = 时间.getMinutes();
if (_loc6 < 10)
{
_loc6 = "0" + _loc6;
} // end if
if (_loc4 < 10)
{
_loc4 = "0" + _loc4;
} // end if
a = _loc7[时间.getDay()];
b = 时间.getHours() + ":" + _loc6 + ":" + _loc4;
c = 时间.getFullYear() + "年" + _loc10[时间.getMonth()] + _loc3 + "日";
d = _loc1.getTaoJNianZhu() + "年" + _loc9[_loc1.getTaoJMonth() - 1] + _loc8[_loc1.getTaoJDay() - 1];
f = _loc1.test + "*" + _loc1.cmonth + "*" +_loc1.cday ;
var _loc2 = _loc1.getJieQi();
var _loc5 = "";
if (length(_loc2) > 0)
{
_loc2 = "今日" + _loc2;
}
else
{
_loc2 = "";
} // end else if
if (_loc1.getMonth() == 0 && _loc3 == 1)
{
_loc2 = "欢度元旦";
} // end if
if (_loc1.getMonth() == 4 && _loc3 == 1)
{
_loc2 = "欢度五一";
} // end if
if (_loc1.getMonth() == 9 && _loc3 == 1)
{
_loc2 = "欢度国庆";
} // end if
if (_loc1.getTaoJMonth() == 1 && _loc1.getTaoJDay() == 1)
{
_loc5 = "欢度春节";
} // end if
if (_loc1.getTaoJMonth() == 5 && _loc1.getTaoJDay() == 5)
{
_loc5 = "欢度端午";
} // end if
if (_loc1.getTaoJMonth() == 8 && _loc1.getTaoJDay() == 15)
{
_loc5 = "欢度中秋";
} // end if
_loc2 = _loc2 + _loc5;
e = _loc2;
};


Taoshaw_data.as源码加入的函数:

private function gettianshu(y, m, d)
{
var big:Number = (y-2011) * 365;
var yuetianshu = new Array(0,31,28,31,30,31,30,31,31,30,31,30);
var sum:Number = 0;
var day:Number = d;
for (var i = 0; i < m + 1; i=i+1)
{
sum = sum + yuetianshu[i];
}
return (big + sum + day + 40511);

}

Taoshaw_data.as修改后的源码在附件中。

后记:由于时间有限,目前只计算2011年到2014年2月28日的农历。反正手机估计也用不到那一天。

运行图片如下:





本文出自 “harleysue” 博客,转载请与作者联系!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: