【问题标题】:string was not recognized as a valid datetime using ParseExact使用 ParseExact 未将字符串识别为有效的日期时间
【发布时间】:2022-01-05 06:04:51
【问题描述】:

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

“字符串未被识别为有效的日期时间”

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

【问题讨论】:

  • 你能分享一份你得到的date的价值样本吗?
  • “2022 年 1 月 5 日星期三 00:00:00 GMT+0530(印度标准时间)”我从客户端获得的值需要在服务器端更改为“2022-01-05”@osmanRahimi

标签: c# datetime datepicker datetime-format


【解决方案1】:

首先,我很高兴看到您不要尝试将您的DateTime 保存为string 在您的数据库中。永远不要被choosing the wrong data type 困住。 MySQL 有DATE and DATETIME 类型,选择适合您需要的类型。

让我们看看你的字符串:“Wed Jan 05 2022 00:00:00 GMT+0530 (India Standard Time)”

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

假设我们有:""Wed Jan 05 2022 00:00:00 GMT+0530"

我们仍然有“GMT”并且仍然有 no 方法来解析它而不操纵您的字符串或将其作为您格式中的自定义部分。您可以使用zzz custom format specifier 解析您的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);

现在我们将1/5/2022 12:00:00 AM +05:30 作为birth 变量。您甚至可以使用它的 .LocalDateTime.DateTime.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
}

【讨论】:

  • 嘿,谢谢你的解释。但这里的一个问题是,默认的角度日期格式只有“2022 年 1 月 5 日星期三 00:00:00 GMT+0530(印度标准时间)”。我无法从角度更改格式。 @Soner
  • @sai 我没有说要更改格式。您有一个名为dob 的变量。如我所说,对其进行操作以使其以某种方式成功解析。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多