加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读