在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);