使用 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 属性,这取决于您在数据库中保存的值。

除此之外,还有几点需要考虑;

喜欢;

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
}