在 C# ASP.net 中将文本框内容转换为 DateTime 格式时出错

Posted

技术标签:

【中文标题】在 C# ASP.net 中将文本框内容转换为 DateTime 格式时出错【英文标题】:Error while converting textbox content to DateTime format in C# ASP.net 【发布时间】: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 是的,因为这是无法解析时的默认值(我相信)。就像我说的,按照我的建议去做 【参考方案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 的日期格式。在它是英国格式之前,所以我在将数据保存到数据库时遇到了错误。但是一旦我将其更改为美国格式,它就可以正常工作了。

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

【讨论】:

以上是关于在 C# ASP.net 中将文本框内容转换为 DateTime 格式时出错的主要内容,如果未能解决你的问题,请参考以下文章

在 asp.net mvc razor 应用程序中将 Datetime C# 类型转换为 Date javascript

ASP.NET点击页面内容出现文本框

在 C# 中将字符串转换为比较操作

表单帖子不包含文本框数据 [ASP.NET C#]

在C#中将十六进制字符串转换为其数值[重复]

如何通过 C# ASP.net 从 SQL Server 中的文本框中存储日期