【问题标题】:Date is taking MM/dd/yyyy format which is wrong on server日期采用 MM/dd/yyyy 格式,这在服务器上是错误的
【发布时间】:2016-01-22 11:38:03
【问题描述】:

我的 aspx 页面中有一个文本框和日历控件,可以在本地机器上以 dd-mm-yyyy 格式正常工作。

但是当我在我的服务器上使用相同的代码时,它会自动采用mm-dd-yyyy 格式。我不知道为什么会这样

下面是我的代码:-

<asp:TextBox ID="txtdatefilter" runat="server" Width="70" OnTextChanged="txtdatefilter_TextChanged" ></asp:TextBox>
            <cc3:Calendar ID="CaldatefilterDt" runat="server" CultureName="en-GB" DatePickerImagePath="../Images/icon2.gif"
                DatePickerMode="true" TextBoxId="txtdatefilter" Align="Left" OnDateChanged="CaldatefilterDt_DateChanged">
            </cc3:Calendar>

CS 代码

protected void txtdatefilter_TextChanged(object sender, EventArgs e)
{
    CaldatefilterDt.SelectedDate = Convert.ToDateTime(txtdatefilter.Text);
}

protected void CaldatefilterDt_DateChanged(Object sender, EventArgs e)
{
    txtdatefilter.Text = Convert.ToDateTime(CaldatefilterDt.SelectedDate, CultureInfo.GetCultureInfo("en-GB")).ToString("dd-MM-yyyy");
}

【问题讨论】:

  • 服务器的文化是什么?
  • @BoasEnkler: CultureName="en-GB"
  • 您用于查看页面的浏览器的文化是什么?
  • 不清楚本地机器采用dd-mm-yyyy格式我的服务器自动采用mm-dd-yyyy格式是什么意思 i> 句子。最终格式应该不是问题,因为您总是ToString("dd-MM-yyyy") 格式化Datetime,所以我认为这不是解析问题或其他问题。最好能更好地澄清你的问题。

标签: c# asp.net date datetime


【解决方案1】:

你可以使用DateTime.TryParseExact:

protected void txtdatefilter_TextChanged(object sender, EventArgs e)
{
    DateTime dateFilter;
    if(DateTime.TryParseExact(txtdatefilter.Text, "dd-MM-yyyy", DateTimeFormatInfo.InvariantInfo, DateTimeStyles.None, out dateFilter))
        CaldatefilterDt.SelectedDate = dateFilter;
}

另一种选择是使用DateTime.Parse(更好的TryParse 与用户输入)并提供您的DateTimeFormatInfo/CultureInfo,例如"en-GB"(英国)或"de-DE"(德国):

bool valid = DateTime.TryParse("26-01-2016", new CultureInfo("en-GB"), DateTimeStyles.None, out dateFilter);

第一个选项始终有效,因为它通过使用DateTimeFormatInfo.InvariantInfoCultureInfo.InvariantCulture 来规避本地化问题。第二个选项确保它适用于提供的格式信息/文化。

【讨论】:

  • 让我试试看
  • @coder:我想是的,不知道您使用的日历控件。但是youz已经提供了CultureName="en-GB",有必要吗?
  • 蒂姆:我不这么认为。您的代码也可以在服务器上正常工作。但我仍然不明白为什么它默认采用其他格式。任何特殊的原因
  • @coder:可能是因为您的网络服务器使用了不同的文化,例如en-US。您可以查看他用于日期的控制面板/区域和语言。
【解决方案2】:

使用CultureInfo.InvariantCulture

Convert.ToDateTime(txtdatefilter.Text.ToString(), CultureInfo.InvariantCulture);

【讨论】:

    【解决方案3】:

    使用此代码:

    DateTime dt = DateTime.ParseExact(txtdatefilter.Text.ToString(), "MM/dd/yyyy", CultureInfo.InvariantCulture);
    
    string s = dt.ToString("dd/M/yyyy");
    

    【讨论】:

      猜你喜欢
      • 2016-01-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-11-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多