.NET日期控件的国际化和定制化

.NET开发中,经常需要处理日期和时间。但是,许多开发者并没有充分利用.NET的System.Globalization类来获取不同语言的月份名称。通过这个类,可以轻松地获取从南非荷兰语到越南语的月份名称,而无需了解这些语言。此外,还增加了使用任何选择的日期格式的可能性。这个控件可以很好地与美国或欧洲的日期格式一起工作,并且支持Visual Studio设计器。

System.Globalization命名空间包含了定义与文化相关的信息的类,包括语言、国家/地区、使用的日历、日期、货币和数字的格式模式。

使用了David Truxall在CodeProject上找到的控件作为模板,并添加了以下功能:

属性

以下是控件的一些属性及其默认值和描述:

  • YearsForward: 0 (可选) 一个整数,用于设置控件从当前年份开始渲染的未来年数。
  • YearsBack: 0 (可选) 一个整数,用于设置控件从当前年份开始渲染的过去年数。
  • Culture: (可选) 一个字符串,用于显示月份名称的文化名称。例如,en-gb、es-ES。如果没有设置,它将使用服务器的区域代码。它不会影响控件的值。
  • MonthFormat: MMMM (可选) 一个字符串,用于设置控件中的月份文本。例如,MMM、MMMM、MM。它不会影响控件的值。
  • DateFormat: 使用服务器上的默认格式 (可选) 一个字符串,用于设置输出日期值的格式。例如,dd/MM/yyyy、MM-dd-yyyy、yyyyMMdd。
  • Value: 设置日期的值。*请注意,如果使用dd/MM/yyyy,请确保值是以双位数字设置的,例如02/04/2005是有效的,而2/4/2005不是有效的。
  • SelectCurrentDate: true (可选) 一个布尔值,用于在未指定值时将值设置为当前日期。

示例用法

以下是一些ASP.NET中的示例用法:

<%@ Register TagPrefix="cc1" Namespace="i386.UI" Assembly="i386.UI" %> <cc1:dropdowndatetime id="DropDownDateTime1" runat="server" YearsForward="2" YearsBack="10" Culture="de-DE" SelectCurrentDate="False" MonthFormat="MMM"> </cc1:dropdowndatetime>

美国日期格式化:

<cc1:dropdowndatetime id="Dropdowndatetime4" runat="server" dateFormat="MM/dd/yyyy" Value="11/02/2005"> </cc1:dropdowndatetime>

控件的工作方式

首先,DateFormat默认设置为服务器当前使用的格式,除非设置了DateFormat属性。

private string _DateFormat = System.Threading.Thread.CurrentThread.CurrentCulture.DateTimeFormat.ShortDatePattern; public string Value { get { string s = (string)ViewState["Value"]; if (s == null) return String.Empty; else return s; } set { this.SetSelected(value); ViewState["Value"] = value; } }

控件实现了IPostBackDataHandler接口,以管理在PostBack时控件值的重置。这与David Truxall的实现相同,除了构建postCollection的Value属性。

bool IPostBackDataHandler.LoadPostData(string postDataKey, System.Collections.Specialized.NameValueCollection postCollection) { // ... if (this.SelectedDay == -1 && this.SelectedMonth == -1 && this.SelectedYear == -1) this.Value = ""; else { // 根据DateFormat构建DateTime字符串 DateTimeFormatInfo formatInfo = new DateTimeFormatInfo(); formatInfo.FullDateTimePattern = DateFormat; DateTime dt = new DateTime(this.SelectedYear, this.SelectedMonth, this.SelectedDay); this.Value = dt.ToString(DateFormat, formatInfo); } }

构建子控件:

protected override void CreateChildControls() { DateTime dt = DateTime.Today; // ... if (SelectCurrentDate && this.Value == "") { // 使用当前日期 SelectedDay = dt.Day; SelectedMonth = dt.Month; SelectedYear = dt.Year; DateTimeFormatInfo formatInfo = new DateTimeFormatInfo(); formatInfo.FullDateTimePattern = DateFormat; this.Value = dt.ToString(DateFormat, formatInfo); } // ... Controls.Add(ddlboxDay); Controls.Add(ddlboxMonth); Controls.Add(ddlboxYear); }

调试模式

调试模式用于检查控件的当前状态。DebugMode输出Value、ViewStates、CultureInfo和DateFormat。要设置DebugMode,请使用DebugMode="true"。

<cc1:dropdowndatetime DebugMode="true" id="DropDownDateTime1" runat="server"> </cc1:dropdowndatetime>

浏览器兼容性

以下是测试过的浏览器的简短列表。没有在电脑上安装Netscape。

  • Safari 1.0.3 - Mac System 9+ - 完全兼容
  • Netscape 4.77 - Mac System 10.2.8 - 不兼容
  • Opera 6.0.3 - Mac System 10.2.8 - 完全兼容
  • Internet Explorer 5.1, 5.2 - Mac System 9+ - 完全兼容
  • Firefox 1.x - Windows XP - 完全兼容
  • Internet Explorer 4.0+ - Windows XP - 完全兼容
  • Netscape ?? - Windows ?? - ??
  • Internet Explorer 3.0 - 需要使用服务器验证。如果某个浏览器无法正常工作,请告诉。

JavaScript支持

从调试模式中,可能会注意到隐藏的输入框。在PostBack到服务器之前,可以使用JavaScript中的这个输入框。

沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485