如何修改C# Excel转SQL日期方法 自动识别格式输出yyyy-MM-dd
需求说明
我实现了一个名为convertDatefromExcelToSQL的方法,功能是提取Excel文件中的日期值并转换为标准格式yyyy-MM-dd。但该方法存在兼容问题:当运行设备的系统日期格式与方法内预设的格式不一致时,会触发转换报错。需要对该方法进行改造,使其可以自动识别输入的日期格式,最终仍然输出标准的yyyy-MM-dd格式日期。
原有实现代码
核心转换方法
public static string convertDatefromExcelToSQL(string excelDate) { string sdat = ""; DateTime dat; sdat = ((string.IsNullOrEmpty(excelDate)) ? sdat : excelDate); if (MIB.IsDouble(sdat)) { dat = DateTime.FromOADate(double.Parse(sdat)); } else { if (sdat.Contains(":")) { sdat = sdat.Split(' ')[0]; } dat = DateTime.ParseExact(sdat, "dd/MM/yyyy", CultureInfo.InvariantCulture); } return dat.ToString("yyyy-MM-dd"); }
依赖的IsDouble方法
public static bool IsDouble(string text) { Double num = 0; bool isDouble = false; // 空字符串直接返回false if (string.IsNullOrEmpty(text)) { return false; } isDouble = Double.TryParse(text, out num); return isDouble; }
改造后兼容多格式的实现
public static string convertDatefromExcelToSQL(string excelDate) { // 空输入直接返回空字符串,可根据业务需要调整为其他默认值 if (string.IsNullOrEmpty(excelDate)) { return ""; } string sdat = excelDate.Trim(); DateTime dat; // 处理Excel数字格式日期 if (IsDouble(sdat)) { dat = DateTime.FromOADate(double.Parse(sdat)); return dat.ToString("yyyy-MM-dd"); } // 去除时间部分,只保留日期段 if (sdat.Contains(":")) { sdat = sdat.Split(' ')[0]; } // 预设所有可能的日期格式,可根据实际业务场景扩展 string[] allowedFormats = new string[] { "dd/MM/yyyy", "MM/dd/yyyy", "yyyy/MM/dd", "dd-MM-yyyy", "MM-dd-yyyy", "yyyy-MM-dd", "dd.MM.yyyy", "MM.dd.yyyy", "yyyy.MM.dd" }; // 多格式匹配 if (DateTime.TryParseExact(sdat, allowedFormats, CultureInfo.InvariantCulture, DateTimeStyles.None, out dat)) { return dat.ToString("yyyy-MM-dd"); } // 兜底匹配:如果上面的格式都不匹配,尝试用系统默认格式解析 if (DateTime.TryParse(sdat, out dat)) { return dat.ToString("yyyy-MM-dd"); } // 所有解析都失败的兜底返回,可根据业务需要调整,比如返回原字符串、空字符串或抛出业务异常 return ""; }
改造说明
- 新增了常用日期格式列表,覆盖了不同地区常用的斜杠、横杠、点分隔的日期书写格式,可根据实际业务场景随时增删列表内的格式
- 将原有的强制单格式匹配
ParseExact替换为多格式匹配的TryParseExact,不会因为格式不匹配直接抛出异常 - 增加了双重兜底逻辑:先尝试用预设格式匹配,匹配失败再调用通用
TryParse适配系统格式,最大程度提升兼容能力 - 优化了空值处理逻辑,避免空值引发的报错
内容的提问来源于stack exchange,提问作者Mo Arafeh
相关产品推荐
相关产品推荐

