使用ParseExact转换DateTime.Now为dd-MMM-yyyy格式时遇无效日期时间错误
解决DateTime.ParseExact格式错误的问题
你的问题出在逻辑上搞反了ParseExact的用途,还做了完全多余的转换操作,咱们一步步理清楚:
错误根源
你现在的代码是先把DateTime.Now(一个DateTime类型)转成字符串,再用ParseExact试图把这个字符串转回DateTime——但Convert.ToString(DateTime.Now)会用当前系统的默认日期格式生成字符串,这个格式大概率和你指定的dd-MMM-yyyy不匹配,所以ParseExact自然会抛出格式无效的错误。
而且更关键的是:你根本不需要做这个转换!
正确的做法(直接插入DateTime值)
数据库的DateTime类型存储的是时间的本质值,不是字符串格式。你完全可以直接把DateTime.Now作为参数传入,数据库会自动处理存储,后续查询出来还是DateTime类型,你可以再按需格式化显示:
db.AddInParameter(objdbCommand, "@dtAddedOn", DbType.DateTime, DateTime.Now);
如果确实需要生成特定格式的字符串(比如存字符串类型日期)
如果你的数据库字段是字符串类型,必须存入dd-MMM-yyyy格式的日期,那应该用DateTime.ToString()来生成对应的字符串,而不是ParseExact:
// 生成指定格式的日期字符串 string formattedDate = DateTime.Now.ToString(@"dd-MMM-yyyy", System.Globalization.CultureInfo.InvariantCulture); // 传入字符串类型的参数 db.AddInParameter(objdbCommand, "@dtAddedOn", DbType.String, formattedDate);
再帮你理清楚ParseExact的正确用法
ParseExact的作用是把符合特定格式的字符串解析成DateTime对象,比如你拿到一个前端传过来的字符串"05-Oct-2024",想要把它转成DateTime类型,这时候才会用到它:
string inputDateStr = "05-Oct-2024"; DateTime parsedDate = DateTime.ParseExact(inputDateStr, @"dd-MMM-yyyy", System.Globalization.CultureInfo.InvariantCulture);
内容的提问来源于stack exchange,提问作者BKM
相关产品推荐
相关产品推荐

