------------------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” 博客,转载请与作者联系!