当前位置: 首页 > 知识库问答 >
问题:

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

赵钊
2023-03-14

我正在尝试从角获取数据并使用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个答案

丁翰海
2023-03-14

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

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

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

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

我们仍然有“GMT”,并且仍然没有办法在不操作您的字符串或将其作为自定义部分放入您的格式的情况下解析它。您可以使用zzzhtml" target="_blank">自定义格式说明符解析您的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
}
 类似资料:
  • (免责声明:这个异常已经在许多其他线程中报告过了,是的,我已经搜索了一下,试图找到解决我这个问题的方法!!) 我有一个WPF应用程序,其中WPF Toolkit DatePicker控件绑定到DateTime变量: 每当我输入日期(如4/20/2012)时,DatePicker控件似乎认为它实际上是英国日期格式(DD/MM/YYYY),并且WPFtoolkit源代码抛出“String未被识别为有效

  • 我有一个包含日期的字符串,我需要将hh:mm:ss添加到日期中,但是当我使用dateFormat时,它会给出ParseException。代码如下: 我得到了abv代码的解析异常。但是,如果我从日期格式中删除hh:mm:ss,它工作得很好,输出将是from Date=Wed Sep 25 00:00:00 IST 2013。但我需要像from date=2013-09-25 00:00:00这样的

  • 问题内容: 我想将日期字符串解析为日期。我在寻找其他问题,但没有找到答案。 错误消息是java.text.ParseException:而且我不知道怎么了。 你能帮我吗。提前致谢。 编辑:好的。我将其翻译成英文,但是我仍然遇到同样的问题。我不想更改输入,因为它来自邮件数据库。还有其他想法吗? 我发现了问题。我是瞎子 来自数据库的St是,不是 谢谢。 问题答案: 在德语中,“欧洲中部时间”是“Mit

  • 问题内容: Java 8在这里。我有以下代码: 在运行时,出现以下异常: …被调用抛出 解析器出了什么问题? 问题答案: 文档中的示例: 您应该使用而不是。和之间的区别在这里提到。

  • 问题内容: 我正在尝试将字符串“ 20091229050936”转换为“ 2009年12月29日(UTC)05:09” 给 显然,我犯了一个错误:时间是错误的,它是日期时间对象!它有一个日期 和 一个时间部分! 给 我如何将字符串转换为格式化的日期字符串? 问题答案: 返回一个; 接受作为可选参数: 给

  • 首先,我的问题是通过Spring MongoDb的MongoRepository在MongoDB中搜索集合。 我的对象: 我可以在Mongo query中随心所欲地执行以下操作: (您可以用新日期替换ISODate) 但是要在Spring做这件事,我想这样做: 但它失败了,我搜索了两个主题:这里和那里 最终 但是,我又一次遇到了解析的问题: 2019-03-22 10:09:48.261ERROR