ChineseDate.as
package liuyou.util { import mx.formatters.DateFormatter; /** * 计算阴历. * <code>new ChineseDate(new Date()).date</code> * @Author liuyou<[email protected]> * */ 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, 694, 201326, 2350, 465197, 3221, 3402, 400202, 2901, 1386, 267611, 605, 2349, 137515, 2709, 464533, 1738, 2901, 330421, 1242, 2651, 199255, 1323, 529706, 3733, 1706, 398762, 2741, 1206, 267438, 2647, 1318, 204070, 3477, 461653, 1386, 2413, 330077, 1197, 2637, 268877, 3365, 531109, 2900, 2922, 398042, 2395, 1179, 267415, 2635, 661067, 1701, 1748, 398772, 2742, 2391, 330031, 1175, 1611, 200010, 3749, 527717, 1452, 2742, 332397, 2350, 3222, 268949, 3402, 3493, 133973, 1386, 464219, 605, 2349, 334123, 2709, 2890, 267946, 2773, 592565, 1210, 2651, 395863, 1323, 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; } } }
package liuyou.util { /** * @Author liuyou<[email protected]> * */ 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();