提问者:小点点

使用ParseExact无法将字符串识别为有效的日期时间


我正在尝试从角获取数据并使用C#通过WebAPI将其保存在数据库中。现在我在转换DOB时遇到问题,我得到了这个错误

“字符串未被识别为有效的datetime”

角度日期格式:“Wed Jan 05 2022 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");


共1个答案

匿名用户

首先,我很高兴看到您没有尝试将您的DateTime保存为数据库中的string。永远不要因为选择错误的数据类型而困住自己。MySQL有DATEDATETIME类型,请选择适合您需求的类型。

让我们看看你的字符串:“Wed Jan05 2022 00:00:00GMT 0530(印度标准时间)”

没有内置的方法来解析中的时区名称。网因此,最好删除字符串中的时区名称-(印度标准时间)部分。

假设我们有:"Wed Jan05 2022 00:00:00GMT 0530"

我们仍然有“GMT”,并且仍然没有办法在不操作您的字符串或将其作为自定义部分放入您的格式的情况下解析它。您可以使用zzz自定义格式说明符解析您的UTC偏移部分。最后一件事,由于您的字符串具有UTC Offset,因此最好将其解析为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);

现在我们将2022年1月5日12:00:00 AM 05:30作为出生变量。您甚至可以使用它的。LocalDateTime。日期时间或。UtcDateTime属性,它取决于您在数据库中保存的值。

除此之外,还有一些需要考虑的事情;

  • 不要将连接字符串以纯文本形式放在代码中,请阅读:我应该在哪里存储数据库连接字符串?
  • 还可以使用使用语句自动释放您的连接和命令,因为它们是IDisposable
  • 作为最佳实践,不要使用AddSusValue方法。它可能会产生意想不到的结果。使用.Add()方法或它的重载。

喜欢

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
}