【问题标题】:Convert UK date format to American将英国日期格式转换为美国日期
【发布时间】:2013-03-22 17:31:12
【问题描述】:

我有一个 JQuery 日期选择器,它将日期以 DD/MM/YYYY 格式放入文本框中。

我正在尝试将其存储在需要接受日期为 MM/DD/YYYY 的 SQL Server 2008 中,我应该如何格式化日期才能使其正常工作?

这是在查询中添加 my 参数的代码,这会导致错误,因为日期和月份是错误的方式

 TextBox fixtureDateTextBox = (TextBox)Master.FindControl("ContentPlaceHolderMenu").FindControl("datepicker");
 SqlParameter fixtureDateParam = new SqlParameter("@fixtureDate", fixtureDateTextBox.Text);

【问题讨论】:

  • 看看这个,应该是你要找的。 stackoverflow.com/a/15547264/2171266
  • Matt 使用 SqlParameters.AddWithValue() 查找方法使用与 SqlParameter 相反的方法也将值作为变量传递给您的参数,而不是清晰或硬编码的文本 Avoind SQL Injection

标签: c# asp.net date date-format


【解决方案1】:

永远不要,永远在你正在做的时候直接将输入文本插入到参数中 - 这是太多安全漏洞和漏洞的根本原因。通过调用DateTimeOffset.Parse(...),先将输入解析成DateTimeOffset对象(也可以使用DateTime,但一般使用Offset比较好),然后直接添加为参数即可,无需修改。

编辑:我重新阅读了您的问题,并意识到虽然上述内容没有错,但它确实遗漏了一些解决您问题的重要事项。请参阅this,了解如何配置日期选择器以显示其存储在备用字段中的备用日期格式:

编辑 2: 您需要使用允许传入IFormatProvider 实例的重载来解析DateTime 对象。 请参阅http://msdn.microsoft.com/en-us/library/system.iformatprovider.aspx 以获取有关如何做您想做的事情的示例。否则,DateTime.Parse('13/3/2013') 将因格式无法识别而失败。

DateTime.Parse('13/3/2013', new CultureInfo("en-GB").DateTimeFormat)是你要对输入框做的事情。

【讨论】:

    【解决方案2】:

    我同意其他人的观点,你应该能够配置 JQuery 选择器格式,但如果你不能,这个应该解决问题:

    TextBox fixtureDateTextBox = (TextBox)Master.FindControl("ContentPlaceHolderMenu").FindControl("datepicker");
    DateTime fixtureDate = DateTime.Parse(fixtureDateTextBox.Text, new CultureInfo("en-GB"));
    SqlParameter fixtureDateParam = new SqlParameter("@fixtureDate", fixtureDate.ToString(new CultureInfo("en-US"));
    

    【讨论】:

    • yours 是一个强大的解决方案,因为它在该日期调用 ToString 时不会假设有关 CurrentUICulture 的任何内容
    【解决方案3】:

    试试这个:

    TextBox fixtureDateTextBox = (TextBox)Master.FindControl("ContentPlaceHolderMenu").FindControl("datepicker");
    DateTime date = DateTime.Parse(fixtureDateTextBox.Text);
    SqlParameter fixtureDateParam = new SqlParameter("@fixtureDate", date);
    

    【讨论】:

    • 如果您的 CultureInfo 不是 en-UK(或遵循该日历日期格式约定的文化信息),那将失败
    【解决方案4】:

    在命名空间部分添加:using System.Globalization;

    然后按如下方式解析您的输入日期:

    string DB_Date = (DateTime.Parse(fixtureDateTextBox.Text)).ToString(new CultureInfo("en-US"));
    

    【讨论】:

    • 如果 CurrentCulture 不支持该日期格式样式,那仍然会失败
    【解决方案5】:
      DateTime UKDate = Convert.ToDateTime(datepicker.Text);<br>
      string usDate= UKDate.ToString("dd-MM-yyyy");<br>
      SqlParameter fixtureDateParam = new SqlParameter("@fixtureDate", usDate);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-19
      • 2021-11-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多