在ASP.NET中,如何将DropDownList中的日期格式强制为“DD / MM / YYYY”?

我必须构建一个DropDownList,其中包含过去7天的日期。 我希望DropDownList将日期显示为“DD / MM / YYYY”。 所以我创建了一个日期列表:

DateTime date = DateTime.Now; List dates = new List(); for (int i = 0; i < HISTORY_LENGTH; i++) { dates.Add(date.AddDays(-i)); } DropDownList.DataSource = dates; DropDownList.DataBind(); 

我将日期添加为DateTime,而不是字符串。 我认为这是我的DateTime对象的方法ToString()被调用来创建在我的DropDownList中可见的文本。 默认情况下,它是日期和时间。 结果是:

[0]:{16/07/2008 11:08:27}

[1]:{15/07/2008 11:08:27}

[2]:{14/07/2008 11:08:27}

[3]:{13/07/2008 11:08:27}

[4]:{12/07/2008 11:08:27}

[5]:{11/07/2008 11:08:27}

[6]:{10/07/2008 11:08:27}

如何强制格式为“DD / MM / YYYY”?

我将DateTime包装在另一个对象中并重写ToString(),因为它是下拉列表显示的内容。

 class MyDateTime { public MyDateTime(DateTime dt) { _dt = dt; } public override String ToString() { return _dt.ToString("dd/MM/yyyy"); } private DateTime _dt; } 

这样做的主要优点是,您可以存储除字符串之外的其他信息,以引用其他对象或数据。 如果只有一个普通的字符串就足够了,那就太过分了。

如果在所有语言环境(语言)中使用’/’对您来说很重要,那么您必须提升它,否则您可能会在某些位置找到另一个字符。

有关一些例子,请参阅http://www.color-of-code.de/index.php?option=com_content&view=article&id=58:c-format-strings&catid=38:programming&Itemid=66 (我的作弊清单中遇到了陷阱)。

代码必须稍微修改一下:

 DateTime date = DateTime.Now; List dates = new List(); for (int i = 0; i < HISTORY_LENGTH; i++) { dates.Add(new MyDateTime(date.AddDays(-i))); } DropDownList.DataSource = dates; DropDownList.DataBind(); 

您需要做的就是设置DropDownList.DataTextFormatString – 然后在DataBinding上,您的控件将应用正确的格式:

  

您也可以将日期格式设置为:而不是格式化数据源:

 DropDownList.DataTextFormatString = "{0:dd/MM/yyyy}"; 

在将数据绑定到控件之前,在列表中格式化日期。

  List dates = new List(HISTORY_LENGTH - 1); for (int i = 0; i < HISTORY_LENGTH; i++) { dates.Add(DateTime.Today.ToString("dd/MM/yyyy")); } DropDownList.DataSource = dates; DropDownList.DataBind(); 

只需手动将项添加到DropDownList.Items集合,而不是依赖于DataBind():

 DateTime date = DateTime.Now; for (int i = 0; i < HISTORY_LENGTH; i++) { DropDownList.Items.Add(new ListItem(date.AddDays(-i).ToString("dd/MM/yyyy"), date.AddDays(-i))) } 

如果您需要在整个应用程序中执行此操作,则需要查看CultureInfo对象。

您可以通过调用获取当前的CultureInfo对象

 var culture = CultureInfo.CurrentCulture; 

CultureInfo对象有一个名为DateTimeFormat的属性,该属性又有一个名为ShortDatePattern的属性,您应该这样设置…

 culture.DateTimeFormatInfo.ShortDatePattern = "dd/MM/yyyy"; 

现在你可以通过格式化字符串来使用它,就像这样……

 String.Format("{d}", someDateTime);