我有一个日期格式的文本框dd/MM/yyyy
,我想将其转换为yyyy-MM-dd
将其插入数据库的格式。
我试过
Convert.DateTime/DateTime.ParseExact
但它总是给我系统的默认日期格式。
我不知道在 C# 中转换它的任何其他方法...
我有一个日期格式的文本框dd/MM/yyyy
,我想将其转换为yyyy-MM-dd
将其插入数据库的格式。
我试过
Convert.DateTime/DateTime.ParseExact
但它总是给我系统的默认日期格式。
我不知道在 C# 中转换它的任何其他方法...
您根本不应该将其转换为字符串以将其插入数据库。(我对推荐这种方法的所有其他答案感到惊讶。)
相反,您应该使用参数化 SQL,并将参数的值设置为DateTime
您获得的值。无论如何,您都应该使用参数化 SQL以避免 SQL 注入攻击,并保持代码和数据分离。它避免了不必要的字符串转换(每一个都是潜在的痛点)这一事实是另一个好处。
您问题的这一部分表明您有一个基本的误解:
我使用 Convert.DateTime/DateTime.ParseExact 它总是给我系统日期格式。
这些方法会给你一个DateTime
. ADateTime
没有格式。当您打电话时,ToString
您只会获得当前文化的默认格式,但这不是价值的一部分。就像数字一样 - 16 和 0x10 是同一个数字,并且int
不“知道”它是十进制还是十六进制;这是一个毫无意义的概念。
所有这一切都超出了您当前的问题,试图保持您的代码库在类型方面保持清洁。您应该尽可能多地以最合适的形式保存数据,并确保您在所有方面都准确理解这些数据的含义。转换为其他类型的通信(如字符串)应仅在 API/系统边界处进行,并且尽可能避免(例如,在这种情况下使用参数化 SQL)。
实际上没有必要改变它。这只是显示格式,但里面的“日期时间”对象保持不变。根据您要插入的方式,您可以使用:
string dateValue = DateTime.Now.ToString("yyyy-MM-dd");
并将其插入到您的查询字符串中。
编辑
但正如 Jon Skeet 评论的那样,永远不应该像这样手动构建查询字符串。像参数化 SQL 或使用 NHibernate 这样更简洁的方法应该是您的首要关注点。
希望这有效!
DateTime 变量= Convert.ToDateTime(你的日期);
你可以像这样格式化它:
string sDateTime = Convert.ToDateTime(txtTextBox.Text).ToString("yyyy-MM-dd");
编辑
在准备信息以输入数据库时,有很多方法可以给猫剥皮。我在这里的解决方案直接回答了 OP,但是我非常承认有更好的方法来做到这一点。
我建议也阅读 Jon Skeet 在此页面上的帖子,因为他提出了一些关于 OP 方法的非常有效的观点。
希望有帮助。