Flex之日历,农历
发布时间:2020-12-15 01:10:34 所属栏目:百科 来源:网络整理
导读:ChineseDate.as package liuyou.util{import mx.formatters.DateFormatter;/** * 计算阴历. * codenew ChineseDate(new Date()).date/code * @Author liuyouyou.liu@gmail.com * */public class ChineseDate{/*天干名称*/public const arrTianGan:Array=["甲
ChineseDate.as package liuyou.util { import mx.formatters.DateFormatter; /** * 计算阴历. * <code>new ChineseDate(new Date()).date</code> * @Author liuyou<you.liu@gmail.com> * */ public class ChineseDate { /*天干名称*/ public const arrTianGan:Array=["甲","乙","丙","丁","戊","己","庚","辛","壬","癸"]; /*地支名称*/ public const arrDiZhi:Array=["子","丑","寅","卯","辰","巳","午","未","申","酉","戌","亥"]; /*属相名称*/ public const arrShuXiang:Array=["鼠","牛","虎","兔","龙","蛇","马","羊","猴","鸡","狗","猪"]; /*农历日期名*/ public const arrDayName:Array=["*","初一","初二","初三","初四","初五","初六","初七","初八","初九","初十","十一","十二","十三","十四","十五","十六","十七","十八","十九","二十","廿一","廿二","廿三","廿四","廿五","廿六","廿七","廿八","廿九","三十"]; /*农历月份名*/ public const arrMonName:Array=["*","正","二","三","四","五","六","七","八","九","十","腊"]; /*公历每月前面的天数*/ public const arrMonthAdd:Array=[0,31,59,90,120,151,181,212,243,273,304,334]; /*农历数据*/ public const arrNongliData:Array=[2635,333387,1701,1748,267701,694,2391,133423,1175,396438,3402,3749,331177,1453,201326,2350,465197,3221,400202,2901,1386,267611,605,2349,137515,2709,464533,1738,330421,1242,2651,199255,1323,529706,3733,1706,398762,2741,1206,267438,2647,1318,204070,3477,461653,2413,330077,1197,2637,268877,3365,531109,2900,2922,398042,2395,1179,267415,2635,661067,398772,2742,330031,1611,200010,527717,1452,332397,3222,268949,3493,133973,464219,334123,2890,267946,2773,592565,1210,395863,2707,265877]; private var _date:Date; public function ChineseDate(date:Date=null) { this._date=date || new Date(); } //根据日期获取星期 public function getChinaTimeDate(date:Date):String { var strChinaTime:String = ""; var chinaDateFormat:DateFormatter = new DateFormatter(); var pattern:String = "YYYY-MM-DD"; chinaDateFormat.formatString=pattern; var formatedDate:String = chinaDateFormat.format(date); var weekPattern:String= "EEE"; chinaDateFormat.formatString=weekPattern; var formatedWeek:String = chinaDateFormat.format(date); //strChinaTime = formatedDate; switch ( formatedWeek) { case "Mon": formatedWeek = "星期一"; break; case "Tue": formatedWeek = "星期二"; break; case "Wed": formatedWeek = "星期三"; break; case "Thu": formatedWeek = "星期四"; break; case "Fri": formatedWeek = "星期五"; break; case "Sat": formatedWeek = "星期六"; break; case "Sun": formatedWeek = "星期日"; break; } strChinaTime = " " + formatedWeek; return strChinaTime; } public function get date():String { var wCurYear:Number,wCurMonth:Number,wCurDay:Number; var nTheDate:int,nIsEnd:int,m:int,k:int,n:int,i:int,nBit:int; var szNongli:String,szNongliDay:String,szShuXiang:String; /*---取当前公历年、月、日---*/ wCurYear=_date.fullYear; wCurMonth=_date.month + 1; wCurDay=_date.date; /*---计算到初始时间1921年2月8日的天数:1921-2-8(正月初一)---*/ nTheDate=(wCurYear - 1921) * 365 + (wCurYear - 1921) / 4 + wCurDay + arrMonthAdd[wCurMonth - 1] - 38; if ((!(wCurYear % 4)) && (wCurMonth > 2)) nTheDate=nTheDate + 1; /*--计算农历天干、地支、月、日---*/ nIsEnd=0; m=0; while (nIsEnd != 1) { if (arrNongliData[m] < 4095) k=11; else k=12; n=k; while (n >= 0) { //获取arrNongliData(m)的第n个二进制位的值 nBit=arrNongliData[m]; for (i=1; i < n + 1; i++) nBit=nBit / 2; nBit=nBit % 2; if (nTheDate <= (29 + nBit)) { nIsEnd=1; break; } nTheDate=nTheDate - 29 - nBit; n=n - 1; } if (nIsEnd) break; m=m + 1; } wCurYear=1921 + m; wCurMonth=k - n + 1; wCurDay=nTheDate; if (k == 12) { if (wCurMonth == arrNongliData[m] / 65536 + 1) wCurMonth=1 - wCurMonth; else if (wCurMonth > arrNongliData[m] / 65536 + 1) wCurMonth=wCurMonth - 1; } /*--生成农历天干、地支、属相 ==> wNongli--*/ szNongli=StringTools.format("%0(%1%2)年",arrShuXiang[((wCurYear - 4) % 60) % 12],arrTianGan[((wCurYear - 4) % 60) % 10],arrDiZhi[((wCurYear - 4) % 60) % 12]); /*--生成农历月、日 ==> wNongliDay--*/ if (wCurMonth < 1) { szNongliDay=StringTools.format("闰%0月%1",arrMonName[-1 * wCurMonth],arrDayName[wCurDay]); } else { szNongliDay=StringTools.format("%0月%1",arrMonName[wCurMonth],arrDayName[wCurDay]); } return szNongli + szNongliDay; } } } StringTools.as package liuyou.util { /** * @Author liuyou<you.liu@gmail.com> * */ public class StringTools { public function StringTools() { trace("can't instanced."); } /** * <code>String.format("hello %0,i don't love %1!","Kitty","Jimmy")</code> * will return "hello Kitty,i don't lve Jimmy!". * * */ public static function format(pattern:String,... args):String { return pattern.replace(/%(d)/g,function():String { return args[Number(arguments[1])]; }); } } } 使用的地方使用之: txtTime.text=StringTools.format(new ChineseDate(new Date()).date); 获取日期: var dateFormatter:DateFormatter = new DateFormatter(); dateFormatter.formatString = "YYYY-MM-DD "; //JJ:NN:SS var now:String= dateFormatter.format(new Date()); 获取时间:动态在走: internal function onTick(evt:TimerEvent):void{ var second:String; var minute:String; var hour:String; clear(); currDate = new Date(); createHands(); showTime(currDate); if (currDate.getHours()<10) { hour="0"+ currDate.getHours()} else { hour=""+currDate.getHours()}; if (currDate.getMinutes()<10) { minute="0"+ currDate.getMinutes()} else { minute=""+currDate.getMinutes()}; if (currDate.getSeconds()<10) { second="0"+ currDate.getSeconds()} else { second=""+currDate.getSeconds()}; currTimePannel.text=hour+":"+minute+":"+second; } _timer = new Timer(1000); _timer.addEventListener(TimerEvent.TIMER,onTick) _timer.start();这样时间就在不停的走动,并且按1s 的时间走。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |