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

------------------20110113-B---------------------

更新10.B:

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

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

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

 

 

 

 

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

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

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

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

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

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

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

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

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

  
  
  
  
  1. 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);  
  2. onEnterFrame = function ()  
  3. {  
  4.     var _loc1 = new Taoshaw_data();  
  5.     _loc1 = new Date();  
  6.     var _loc7 = new Array();  
  7.     _loc7 = ["星期日""星期一""星期二""星期三""星期四""星期五""星期六"];  
  8.     var _loc10 = new Array();  
  9.     _loc10 = ["1月""2月""3月""4月""5月""6月""7月""8月""9月""10月""11月""12月"];  
  10.     var _loc9 = new Array();  
  11.     _loc9 = ["正月""二月""三月""四月""五月""六月""七月""八月""九月""十月""十一月""十二月"];  
  12.     var _loc8 = new Array();  
  13.     _loc8 = ["初一""初二""初三""初四""初五""初六""初七""初八""初九""初十""十一""十二""十三""十四""十五""十六""十七""十八""十九""二十""廿一""廿二""廿三""廿四""廿五""廿六""廿七""廿八""廿九""三十"];  
  14.     var _loc3 = _loc1.getDate();  
  15.     var _loc4 = _loc1.getSeconds();  
  16.     var _loc6 = _loc1.getMinutes();  
  17.     if (_loc6 < 10)  
  18.     {  
  19.         _loc6 = "0" + _loc6;  
  20.     } // end if  
  21.     if (_loc4 < 10)  
  22.     {  
  23.         _loc4 = "0" + _loc4;  
  24.     } // end if  
  25.     a = _loc7[_loc1.getDay()];  
  26.     b = _loc1.getHours() + ":" + _loc6 + ":" + _loc4;  
  27.     c = _loc1.getFullYear() + "年" + _loc10[_loc1.getMonth()] + _loc3 + "日";  
  28.     d = _loc1.getTaoJNianZhu() + "年" + _loc9[_loc1.getTaoJMonth() - 1] + _loc8[_loc1.getTaoJDay() - 1];  
  29.     f = _loc1.test + "*" + _loc1.cmonth + "*" +_loc1.cday ;  
  30.     var _loc2 = _loc1.getJieQi();  
  31.     var _loc5 = "";  
  32.     if (length(_loc2) > 0)  
  33.     {  
  34.         _loc2 = "今日" + _loc2;  
  35.     }  
  36.     else 
  37.     {  
  38.         _loc2 = "";  
  39.     } // end else if  
  40.     if (_loc1.getMonth() == 0 && _loc3 == 1)  
  41.     {  
  42.         _loc2 = "欢度元旦";  
  43.     } // end if  
  44.     if (_loc1.getMonth() == 4 && _loc3 == 1)  
  45.     {  
  46.         _loc2 = "欢度五一";  
  47.     } // end if  
  48.     if (_loc1.getMonth() == 9 && _loc3 == 1)  
  49.     {  
  50.         _loc2 = "欢度国庆";  
  51.     } // end if  
  52.     if (_loc1.getTaoJMonth() == 1 && _loc1.getTaoJDay() == 1)  
  53.     {  
  54.         _loc5 = "欢度春节";  
  55.     } // end if  
  56.     if (_loc1.getTaoJMonth() == 5 && _loc1.getTaoJDay() == 5)  
  57.     {  
  58.         _loc5 = "欢度端午";  
  59.     } // end if  
  60.     if (_loc1.getTaoJMonth() == 8 && _loc1.getTaoJDay() == 15)  
  61.     {  
  62.         _loc5 = "欢度中秋";  
  63.     } // end if  
  64.     _loc2 = _loc2 + _loc5;  
  65.     e = _loc2;  
  66. }; 

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

获取的时候为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源码改成:

  
  
  
  
  1. 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);  
  2. onEnterFrame = function ()  
  3. {  
  4.     var _loc1 = new Taoshaw_data();  
  5.     时间 = new Date();  
  6.     var _loc7 = new Array();  
  7.     _loc7 = ["星期日""星期一""星期二""星期三""星期四""星期五""星期六"];  
  8.     var _loc10 = new Array();  
  9.     _loc10 = ["1月""2月""3月""4月""5月""6月""7月""8月""9月""10月""11月""12月"];  
  10.     var _loc9 = new Array();  
  11.     _loc9 = ["正月""二月""三月""四月""五月""六月""七月""八月""九月""十月""十一月""十二月"];  
  12.     var _loc8 = new Array();  
  13.     _loc8 = ["初一""初二""初三""初四""初五""初六""初七""初八""初九""初十""十一""十二""十三""十四""十五""十六""十七""十八""十九""二十""廿一""廿二""廿三""廿四""廿五""廿六""廿七""廿八""廿九""三十"];  
  14.     var _loc3 = 时间.getDate();  
  15.     var _loc4 = 时间.getSeconds();  
  16.     var _loc6 = 时间.getMinutes();  
  17.     if (_loc6 < 10)  
  18.     {  
  19.         _loc6 = "0" + _loc6;  
  20.     } // end if  
  21.     if (_loc4 < 10)  
  22.     {  
  23.         _loc4 = "0" + _loc4;  
  24.     } // end if  
  25.     a = _loc7[时间.getDay()];  
  26.     b = 时间.getHours() + ":" + _loc6 + ":" + _loc4;  
  27.     c = 时间.getFullYear() + "年" + _loc10[时间.getMonth()] + _loc3 + "日";  
  28.     d = _loc1.getTaoJNianZhu() + "年" + _loc9[_loc1.getTaoJMonth() - 1] + _loc8[_loc1.getTaoJDay() - 1];  
  29.     f = _loc1.test + "*" + _loc1.cmonth + "*" +_loc1.cday ;  
  30.     var _loc2 = _loc1.getJieQi();  
  31.     var _loc5 = "";  
  32.     if (length(_loc2) > 0)  
  33.     {  
  34.         _loc2 = "今日" + _loc2;  
  35.     }  
  36.     else 
  37.     {  
  38.         _loc2 = "";  
  39.     } // end else if  
  40.     if (_loc1.getMonth() == 0 && _loc3 == 1)  
  41.     {  
  42.         _loc2 = "欢度元旦";  
  43.     } // end if  
  44.     if (_loc1.getMonth() == 4 && _loc3 == 1)  
  45.     {  
  46.         _loc2 = "欢度五一";  
  47.     } // end if  
  48.     if (_loc1.getMonth() == 9 && _loc3 == 1)  
  49.     {  
  50.         _loc2 = "欢度国庆";  
  51.     } // end if  
  52.     if (_loc1.getTaoJMonth() == 1 && _loc1.getTaoJDay() == 1)  
  53.     {  
  54.         _loc5 = "欢度春节";  
  55.     } // end if  
  56.     if (_loc1.getTaoJMonth() == 5 && _loc1.getTaoJDay() == 5)  
  57.     {  
  58.         _loc5 = "欢度端午";  
  59.     } // end if  
  60.     if (_loc1.getTaoJMonth() == 8 && _loc1.getTaoJDay() == 15)  
  61.     {  
  62.         _loc5 = "欢度中秋";  
  63.     } // end if  
  64.     _loc2 = _loc2 + _loc5;  
  65.     e = _loc2;  
  66. }; 

 

 

Taoshaw_data.as源码加入的函数:

  
  
  
  
  1.       
  2. private function gettianshu(y, m, d)  
  3. {  
  4.     var big:Number = (y-2011) * 365;  
  5.     var yuetianshu = new Array(0,31,28,31,30,31,30,31,31,30,31,30);  
  6.     var sum:Number = 0;  
  7.     var day:Number = d;  
  8.     for (var i = 0; i < m + 1; i=i+1)  
  9.         {  
  10.     sum = sum + yuetianshu[i];  
  11.         }  
  12.     return (big + sum + day + 40511);  
  13.           
  14. }  

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

 

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

运行图片如下:

 

 

本文出自 “harleysue” 博客,转载请与作者联系!

你可能感兴趣的:(桌面,limo,农历,h1,8320)