【问题标题】:Error while converting textbox content to DateTime format in C# ASP.net在 C# ASP.net 中将文本框内容转换为 DateTime 格式时出错
【发布时间】:2014-04-14 05:39:03
【问题描述】:

您好,我正在开发一个应用程序,因为我需要将日期存储在 sql server 2005 数据库中,该数据库是从前端的文本框中检索的。在前端,允许用户从 JQuery UI DatePicker 插件中选择一个日期。

我得到的错误如下:

String was not recognized as a valid DateTime.

我的代码是:

db.eventDate = DateTime.Parse(txtDate.Text, new CultureInfo("en-US").DateTimeFormat);

【问题讨论】:

  • 确保输入是您尝试转换为指定cultureinfo 的正确格式。您提供的输入格式是什么?
  • 例如:如果我从 JQuery UI Datepicker 中选择一个日期,它会像 14/04/2014 在文本框中。我正在尝试将该文本框数据(即 14/04/2014)转换为 DateTime 格式。
  • 对。这正是它不起作用的原因 - 您的格式是英国格式。您需要为其提供 uk 格式,以便在这种情况下将其解析为正确的日期时间格式,然后将其转换为 us 格式。但是在 jquery ui 选择器中,我相信您可以将默认输入类型/格式设置为 en-us,然后将格式正确设置为 us 格式,然后您的解析将正常工作。
  • 在调试代码时我知道,文本框日期的格式为 14/04/2014,在将其转换为 DateTime 类型后,它将保持为 1/1/0001 12:00 AM
  • 是的,因为这是无法解析时的默认值(我相信)。就像我说的,按照我的建议去做

标签: c# asp.net datetime culture


【解决方案1】:

试试这个代码

string yourDate = txtDate.Text;
string formattedDate = yourDate.ToString("dd-MM-yyyy");
DateTime dt = DateTime.ParseExact(formattedDate , "dd-MM-yyyy", CultureInfo.InvariantCulture);

【讨论】:

    【解决方案2】:

    您应该使用 DateTime.TryParse(expression) 或将对 DateTime.Parse 的调用包装在 try/catch 块中。只是出于兴趣,您可以发布一些您正在转换的示例日期吗?它们是美国格式的,对吗?

    【讨论】:

    • 不正确。在 DateTime.TryParse 周围有一个 try catch 块不会引发异常。 TryParse 就是这样做的 - 尝试解析给定的日期时间值,如果成功则返回 true,如果不成功则返回 false。
    • 请重新阅读我写的内容,我说的是“将您对 DateTime.Parse 的调用包装在 try/catch 块中”,而不是 DateTime.TryParse
    【解决方案3】:

    您最好使用 DateTime.ParseExact 与您设置为日期时间选择器的正确日期时间格式

    例如,如果格式是"MM/dd/yyyy",你可以这样做

    db.eventDate =  DateTime.ParseExact(txtDate.Text, "MM/dd/yyyy", CultureInfo.InvariantCulture);
    

    【讨论】:

    • 嗨@Damith,我也试过你的代码。现在我收到错误,例如 日历 System.Globalization.GregorianCalendar 不支持字符串表示的 DateTime。
    【解决方案4】:

    试试这个..对我来说很好..

    Convert.ToDateTime(txtDate.Text,System.Globalization.CultureInfo.GetCultureInfo("en-US").DateTimeFormat);
    

    Convert.ToDateTime(txtDate.Text);
    

    【讨论】:

    • 您好 Jameem,感谢您的即时回复。我已经尝试过你的建议,但我仍然遇到同样的错误。
    • 在数据库中默认为 1/1/1900 12:00:00 AM。在我的应用程序中,用户将从 JQuery UI 日期选择器中选择日期,其格式为 2014 年 4 月 14 日,我试图在插入数据库之前将此数据从文本框转换为代码中的有效 DateTime 类型。
    【解决方案5】:

    希望以下代码对您有所帮助。

            Dim dt As New DateTime
            Dim txtDateFromUser As String = "04/09/2014"
    
            If DateTime.TryParse(txtDateFromUser, dt) = True Then
    
                Dim connStr As String
                connStr = System.Configuration.ConfigurationManager.ConnectionStrings("youConnectionStringName").ConnectionString
    
                'Insert into database
                Dim sqlconn As New SqlConnection
                sqlconn.ConnectionString = connStr
                Dim sqlcmd As New SqlCommand("insert into tblDateTime (dtTestDate) values ('" + dt.ToString() + "')")
                sqlconn.Open()
                sqlcmd.Connection = sqlconn
                sqlcmd.ExecuteNonQuery()
    
            End If
    

    这是我用过的测试表:

            create table tblDateTime (dtTestDate datetime)
    

    【讨论】:

    • 什么也没发生:( 文本框日期正在转换为默认日期 1/1/0001 12:00:00 AM 我不知道如何摆脱这个错误。还有更多,在数据库中它的数据类型仅为日期时间。
    • 你从文本框中得到的日期字符串是什么?
    【解决方案6】:

    我只是在我的代码中更改了 JQuery UI DatePicker 的日期格式。在它是英国格式之前,所以我在将数据保存到数据库时遇到了错误。但是一旦我将其更改为美国格式,它就可以正常工作了。

    感谢所有审阅我的问题并为我提供答案的人。

    【讨论】:

      猜你喜欢
      • 2013-03-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-29
      • 2014-05-12
      • 1970-01-01
      • 2023-04-02
      • 1970-01-01
      相关资源
      最近更新 更多