using System; using System.Collections.Generic; using System.Text; namespace Shared.Phone { /// /// 日期选择控件(设置和获取值,请使用 dateValue) /// public class DateSelectControl : ButtonBase { #region ■ 变量声明___________________________ /// /// 日期选择时间(8位,如:20101231) /// public Action DateSelectEvent = null; /// /// 日期格式 /// private string dateFomat = string.Empty; /// /// 标题信息 /// private string titleText = string.Empty; private string m_dateValue = "00000000"; /// /// 设置或者获取日期值(8位,如:20101231) /// public string dateValue { get { return m_dateValue; } set { this.m_dateValue = value; int year = Convert.ToInt32(value.Substring(0, 4)); int month = Convert.ToInt32(value.Substring(4, 2)); int day = Convert.ToInt32(value.Substring(6, 2)); var myTime = new DateTime(year, month, day); this.Text = myTime.ToString(this.dateFomat); } } /// /// 年 /// public int Year { get { return Convert.ToInt32(m_dateValue.Substring(0, 4)); } } /// /// 月 /// public int Month { get { return Convert.ToInt32(m_dateValue.Substring(4, 2)); } } /// /// 日 /// public int Day { get { return Convert.ToInt32(m_dateValue.Substring(6, 2)); } } #endregion #region ■ 初始化_____________________________ /// /// 日期选择控件(设置和获取值,请使用 dateValue) /// /// 标题文本 /// 日期格式 public DateSelectControl(string i_titleText = "", string i_dateFomat = "yyyy/MM/dd") { this.dateFomat = i_dateFomat; this.titleText = i_titleText; //用来计算长度的 string dateTextTemp = DateTime.Now.ToString(i_dateFomat); this.TextSize = 12; this.Text = dateTextTemp; this.InitSize(this.GetRealWidthByText(), Application.GetRealHeight(50), false); this.Text = string.Empty; //弹起日期选择 this.ButtonClickEvent += (sender, e) => { //日期选择 this.DoSelectDate(); }; } #endregion #region ■ 日期选择___________________________ /// /// 日期选择 /// private void DoSelectDate() { var listYear = new List(); int nowYear = Convert.ToInt32(DateTime.Now.ToString("yyyy")); for (int i = 0; i < 6; i++) { //五年时间 listYear.Insert(0, (nowYear - i).ToString()); } //月 var listMonth = new List(); var monthText = Language.StringByID(R.MyInternationalizationString.Month); for (int i = 1; i <= 12; i++) { listMonth.Add(i.ToString().PadLeft(2, '0') + monthText); } //日 var listDay = new List(); var dayText = Language.StringByID(R.MyInternationalizationString.Day); for (int i = 1; i <= 31; i++) { listDay.Add(i.ToString().PadLeft(2, '0') + dayText); } PickerView.ShowNormal(listYear, listMonth, listDay, (iyear, imonth, iday) => { //获取正确的日期文本 string datetTemp = this.GetRightDateText(Convert.ToInt32(listYear[iyear]), Convert.ToInt32(listMonth[imonth].Substring(0, 2)), Convert.ToInt32(listDay[iday].Substring(0, 2))); bool change = datetTemp != this.dateValue; //文本显示 this.dateValue = datetTemp; if (change == true) { //值改变才会调用回调函数 DateSelectEvent?.Invoke(datetTemp); } }, listYear.IndexOf(m_dateValue.Substring(0, 4)), listMonth.IndexOf(m_dateValue.Substring(4, 2) + monthText), listDay.IndexOf(m_dateValue.Substring(6, 2) + dayText), this.titleText, Language.StringByID(R.MyInternationalizationString.uFinish), Language.StringByID(R.MyInternationalizationString.uCancel)); } #endregion #region ■ 一般方法___________________________ /// /// 获取正确的日期文本 /// /// /// /// /// private string GetRightDateText(int year, int month, int day) { if (month == 4 || month == 6 || month == 9 || month == 11) { if (day > 30) { day = 30; } } else if (month == 2) { //闰年 if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0) { if (day > 29) { day = 29; } } else { if (day > 28) { day = 28; } } } return year.ToString() + month.ToString().PadLeft(2, '0') + day.ToString().PadLeft(2, '0'); } #endregion } }