在 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。
试试这个..对我来说很好..
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