使用 ParseExact 未将字符串识别为有效的日期时间
string was not recognized as a valid datetime using ParseExact
我正在尝试从 angular 获取数据并使用 C# 通过 WebAPI 将其保存在数据库中。现在我在转换 DOB 时遇到问题,我得到这个错误
"string was not recognized as a valid datetime"
Angular 日期格式:“2022 年 1 月 5 日星期三 00:00:00 GMT+0530(印度标准时间)”
数据库日期格式:“YYYY-MM-DD”
现在需要转换成这种格式。
string dob = httprequest.Form.Get("dob");
MySqlConnection myConnection = new MySqlConnection();
myConnection.ConnectionString = @"Data Source=localhost; Database=pramod; User ID=itesuser; password=ites; Port=3309";
MySqlCommand sqlCmd = new MySqlCommand();
sqlCmd.CommandType = CommandType.Text;
sqlCmd.CommandText = "Insert Into emp_ang (DOB) Values (@dob)";
sqlCmd.Connection = myConnection;
DateTime birth = DateTime.ParseExact(dob, "yyyy/MM/dd", CultureInfo.InvariantCulture);
sqlCmd.Parameters.AddWithValue("@dob", birth);
myConnection.Open();
int rowInserted = sqlCmd.ExecuteNonQuery();
myConnection.Close();
return Ok("inserted");
首先,我很高兴见到您不要 尝试将您的DateTime
保存为数据库中的string
。永远不要让自己陷入 choosing the wrong data type. MySQL have DATE
and DATETIME
类型,选择适合您需要的类型。
让我们看看您的字符串:“Wed Jan 05 2022 00:00:00 GMT+0530(印度标准时间)”
.NET 中没有解析时区名称的内置方法。因此,最好删除字符串中的时区名称 -(印度标准时间)部分。
假设我们有:“”2022 年 1 月 5 日星期三 00:00:00 GMT+0530”
我们仍然有“GMT”并且仍然有没有 的方法来解析它,而无需处理您的字符串或将其作为自定义部分放入您的格式中。您可以使用 zzz
custom format specifier. One last thing, since your string have UTC Offset, it would be better to parse it to DateTimeOffset
而不是 System.DateTime
.
解析 UTC 偏移量部分
var dob = "Wed Jan 05 2022 00:00:00 GMT+0530";
var birth = DateTimeOffset.ParseExact(dob,
"ddd MMM dd yyyy HH:mm:ss 'GMT'zzz",
CultureInfo.InvariantCulture,
DateTimeStyles.None);
现在我们有 1/5/2022 12:00:00 AM +05:30
作为 birth
变量。您甚至可以使用它的 .LocalDateTime
, .DateTime
or .UtcDateTime
属性,这取决于您在数据库中保存的值。
除此之外,还有几点需要考虑;
- 不要将您的连接字符串作为纯文本添加到您的代码中,阅读:Where Should I Store a database Connection String?
- 也用
using
statement to dispose your connection and command automatically since they are IDisposable
.
- 作为最佳实践,不要使用
AddWithValue
方法。 It may generate unexpected results. Use .Add()
method or it's overloads.
喜欢;
using(var myConnection = new MySqlConnection(connectionString))
using(var sqlCmd = myConnection.CreateCommand())
{
// Creater your command
// Add your parameter and it's value
// Open your connection
// Execute your query
}
我正在尝试从 angular 获取数据并使用 C# 通过 WebAPI 将其保存在数据库中。现在我在转换 DOB 时遇到问题,我得到这个错误
"string was not recognized as a valid datetime"
Angular 日期格式:“2022 年 1 月 5 日星期三 00:00:00 GMT+0530(印度标准时间)”
数据库日期格式:“YYYY-MM-DD”
现在需要转换成这种格式。
string dob = httprequest.Form.Get("dob");
MySqlConnection myConnection = new MySqlConnection();
myConnection.ConnectionString = @"Data Source=localhost; Database=pramod; User ID=itesuser; password=ites; Port=3309";
MySqlCommand sqlCmd = new MySqlCommand();
sqlCmd.CommandType = CommandType.Text;
sqlCmd.CommandText = "Insert Into emp_ang (DOB) Values (@dob)";
sqlCmd.Connection = myConnection;
DateTime birth = DateTime.ParseExact(dob, "yyyy/MM/dd", CultureInfo.InvariantCulture);
sqlCmd.Parameters.AddWithValue("@dob", birth);
myConnection.Open();
int rowInserted = sqlCmd.ExecuteNonQuery();
myConnection.Close();
return Ok("inserted");
首先,我很高兴见到您不要 尝试将您的DateTime
保存为数据库中的string
。永远不要让自己陷入 choosing the wrong data type. MySQL have DATE
and DATETIME
类型,选择适合您需要的类型。
让我们看看您的字符串:“Wed Jan 05 2022 00:00:00 GMT+0530(印度标准时间)”
.NET 中没有解析时区名称的内置方法。因此,最好删除字符串中的时区名称 -(印度标准时间)部分。
假设我们有:“”2022 年 1 月 5 日星期三 00:00:00 GMT+0530”
我们仍然有“GMT”并且仍然有没有 的方法来解析它,而无需处理您的字符串或将其作为自定义部分放入您的格式中。您可以使用 zzz
custom format specifier. One last thing, since your string have UTC Offset, it would be better to parse it to DateTimeOffset
而不是 System.DateTime
.
var dob = "Wed Jan 05 2022 00:00:00 GMT+0530";
var birth = DateTimeOffset.ParseExact(dob,
"ddd MMM dd yyyy HH:mm:ss 'GMT'zzz",
CultureInfo.InvariantCulture,
DateTimeStyles.None);
现在我们有 1/5/2022 12:00:00 AM +05:30
作为 birth
变量。您甚至可以使用它的 .LocalDateTime
, .DateTime
or .UtcDateTime
属性,这取决于您在数据库中保存的值。
除此之外,还有几点需要考虑;
- 不要将您的连接字符串作为纯文本添加到您的代码中,阅读:Where Should I Store a database Connection String?
- 也用
using
statement to dispose your connection and command automatically since they areIDisposable
. - 作为最佳实践,不要使用
AddWithValue
方法。 It may generate unexpected results. Use .Add()
method or it's overloads.
喜欢;
using(var myConnection = new MySqlConnection(connectionString))
using(var sqlCmd = myConnection.CreateCommand())
{
// Creater your command
// Add your parameter and it's value
// Open your connection
// Execute your query
}