使用 C# 为 MySQL 转换 DateTime

Posted

技术标签:

【中文标题】使用 C# 为 MySQL 转换 DateTime【英文标题】:Convert DateTime for MySQL using C# 【发布时间】:2011-04-07 16:34:04 【问题描述】:

我想在 C# 中更改 mysql 的 DateTime。

我的 MySQL 数据库只接受这种格式1976-04-09 22:10:00

在 C# 中有一个具有日期值的字符串:

string str = "12-Apr-1976 22:10";

我想为 MySQL 转换然后它看起来像:

1976-04-12 22:10

我如何更改它们或其他程序员如何使用dd mm hh yy 方法来做到这一点?谁能告诉我他们的情况?

【问题讨论】:

【参考方案1】:

这对我有用:

1.从oracle数据库中提取日期并传递给变量

 string lDat_otp = "";

  if (rw_mat["dat_otp"].ToString().Length <= 0)
  
      lDat_otp = "";
  
  else
  
      lDat_otp = rw_mat["dat_otp"].ToString();
  

2.转换为mysql格式

DateTime dateValue = DateTime.Parse(lDat_otp);
string formatForMySql = dateValue.ToString("yyyy-MM-dd HH:mm");

3.将 formatForMySql 变量传递给过程或其他东西

【讨论】:

【参考方案2】:

请记住,您可以对 ISO 格式进行硬编码

string formatForMySql = dateValue.ToString("yyyy-MM-dd HH:mm:ss");

或使用下一个:

// just to shorten the code
var isoDateTimeFormat = CultureInfo.InvariantCulture.DateTimeFormat;

// "1976-04-12T22:10:00"
dateValue.ToString(isoDateTimeFormat.SortableDateTimePattern); 

// "1976-04-12 22:10:00Z"    
dateValue.ToString(isoDateTimeFormat.UniversalSortableDateTimePattern)

等等

【讨论】:

hh:mm 是 12 小时格式,您需要 HH:mm。我刚刚用那个部分更新了我的代码 很好的答案!小语法错误:DataTimeFormat 应该是 DateTimeFormat。 @DerekW:谢谢!固定的。酷:) 不要像这样将日期传递给 MySQL。请改用***.com/a/28925999/34092。 如果在CultureInfo.InvariantCulture.DateTimeFormat 上找不到SortableDateTimePattern,请尝试使用DateTimeFormatInfo.InvariantInfo.SortableDateTimePattern【参考方案3】:

我强烈建议您首先使用参数化查询而不是将值作为字符串发送。

这样您只需要能够将您的输入格式转换为DateTimeDateTimeOffset,然后您就不必担心数据库格式。这不仅更简单,而且避免了 SQL 注入攻击(例如针对字符串值),并且在面对数据库设置更改时更加健壮。

对于原始转换为DateTime,建议您使用DateTime.ParseExactDateTime.TryParseExact 明确指定预期格式。

【讨论】:

根据我使用 MySQL 的经验,可能是因为排序规则设置,它并不总是接受 System.DateTime,保证在任何服务器上正常工作的最佳方法是将日期显式转换为格式为 yyyy-MM-dd .. 的字符串 【参考方案4】:

如果您的 DateTime 字符串格式是固定的,您可以使用以下方法转换为 System.DateTime

string myDate = "12-Apr-1976 22:10";
DateTime dateValue = DateTime.Parse(myDate);

现在,当您需要特定格式的文件时,您可以反转该过程,即:

string formatForMySql = dateValue.ToString("yyyy-MM-dd HH:mm");

编辑 - 更新代码。由于某些奇怪的原因,DateTime.ParseExact 并没有很好地发挥作用。

【讨论】:

顺便说一句,你的代码不能开箱即用,我不知道为什么。但是只有DateTime.Parse 可以正常工作

以上是关于使用 C# 为 MySQL 转换 DateTime的主要内容,如果未能解决你的问题,请参考以下文章

如何将 C# DateTime 转换为 MySQL 时间戳表列

无法使用 0000-00-00 00:00:00 值将 MySQL.DateTime 转换为 System.DateTime

无法将 MySQL 日期/时间值转换为 System.DateTime

如何从 MySql 数据库中获取日期到 C# DateTime 对象?

使用 C# 将 DateTime 格式转换为 SQL 格式

无法将 DateTime 从 SQL Server 转换为 C# DateTime