Flex之日历,农历

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, 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;

		}
		
		
		
	}
	

}

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 的时间走。



  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值