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
}
}