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

Bas*_*mme 6 c# asp.net format datetime drop-down-menu

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

DateTime date = DateTime.Now;
List<DateTime> dates = new List<DateTime>();

for (int i = 0; i < HISTORY_LENGTH; i++)
{
    dates.Add(date.AddDays(-i));
}

DropDownList.DataSource = dates;
DropDownList.DataBind();
Run Code Online (Sandbox Code Playgroud)

我将日期添加为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"?

And*_*are 23

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

<asp:DropDownList
    id="yourList"
    runat="server"
    dataTextFormatString="{0:dd/MM/yyyy}"/>
Run Code Online (Sandbox Code Playgroud)


jde*_*aan 1

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

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

这样做的主要优点是您可以存储其他信息而不仅仅是字符串来引用其他对象或数据。如果只用一个普通的字符串就足够了,那就有点矫枉过正了。

如果在所有语言环境中“/”对您都很重要,那么您必须将其加引号,否则您可能会在某些位置出现另一个字符。

请参阅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<MyDateTime> dates = new List<MyDateTime>();

for (int i = 0; i < HISTORY_LENGTH; i++)
{
    dates.Add(new MyDateTime(date.AddDays(-i)));
}

DropDownList.DataSource = dates;
DropDownList.DataBind();
Run Code Online (Sandbox Code Playgroud)