using System;
|
using System.Collections.Generic;
|
using System.Text;
|
|
namespace Shared.Phone
|
{
|
/// <summary>
|
/// 日期选择控件(设置和获取值,请使用 dateValue)
|
/// </summary>
|
public class DateSelectControl : ButtonBase
|
{
|
#region ■ 变量声明___________________________
|
|
/// <summary>
|
/// 日期选择时间(8位,如:20101231)
|
/// </summary>
|
public Action<string> DateSelectEvent = null;
|
/// <summary>
|
/// 日期格式
|
/// </summary>
|
private string dateFomat = string.Empty;
|
/// <summary>
|
/// 标题信息
|
/// </summary>
|
private string titleText = string.Empty;
|
|
private string m_dateValue = "00000000";
|
/// <summary>
|
/// 设置或者获取日期值(8位,如:20101231)
|
/// </summary>
|
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);
|
}
|
}
|
|
/// <summary>
|
/// 年
|
/// </summary>
|
public int Year
|
{
|
get { return Convert.ToInt32(m_dateValue.Substring(0, 4)); }
|
}
|
|
/// <summary>
|
/// 月
|
/// </summary>
|
public int Month
|
{
|
get { return Convert.ToInt32(m_dateValue.Substring(4, 2)); }
|
}
|
|
/// <summary>
|
/// 日
|
/// </summary>
|
public int Day
|
{
|
get { return Convert.ToInt32(m_dateValue.Substring(6, 2)); }
|
}
|
|
|
#endregion
|
|
#region ■ 初始化_____________________________
|
|
/// <summary>
|
/// 日期选择控件(设置和获取值,请使用 dateValue)
|
/// </summary>
|
/// <param name="i_titleText">标题文本</param>
|
/// <param name="i_dateFomat">日期格式</param>
|
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 ■ 日期选择___________________________
|
|
/// <summary>
|
/// 日期选择
|
/// </summary>
|
private void DoSelectDate()
|
{
|
var listYear = new List<string>();
|
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<string>();
|
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<string>();
|
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 ■ 一般方法___________________________
|
|
/// <summary>
|
/// 获取正确的日期文本
|
/// </summary>
|
/// <param name="year"></param>
|
/// <param name="month"></param>
|
/// <param name="day"></param>
|
/// <returns></returns>
|
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
|
}
|
}
|