【发布时间】:2020-04-20 15:30:15
【问题描述】:
我有一个项目要解决那里的一些问题。
有一个包含日期列的 Excel 工作表。现在我正在使用以下代码检查日期是否有效。在try 之后,我不断收到错误
字符串“43941”未被识别为有效的日期时间
我在 StackOverflow 上尝试了一些代码,但没有一个为我解决这个问题。
public ValidationResult IsDateValid(ExcelWorksheet workSheet, int noOfRow)
{
ValidationResult validationResult = new ValidationResult();
validationResult.ErrorColIndex = 3;
validationResult.IsValid = true;
// be on the first column [r,c]
int row = 2;
for (int i = 2; i <= noOfRow; i++) //start from the second row
{
if (!string.IsNullOrEmpty(workSheet.Cells[i, 3].Text))
{
string date = workSheet.Cells[i, 3].Value.ToString();
// will throw exception if the fields in tenor are invalid
try
{
DateTime p = DateTime.ParseExact(date.Trim(), "M/dd/yyyy", null);
}
catch (Exception ex)
{
validationResult.Message = "Invalid Date.";
validationResult.IsValid = false;
validationResult.ErrorRowIndex = row;
break;
}
}
else
{
validationResult.Message = "Empty Date.";
validationResult.IsValid = false;
validationResult.ErrorRowIndex = row;
break;
}
++row;
}
return validationResult;
}
如果有人能指出我做错了什么,我会很高兴
谢谢
【问题讨论】:
-
你怎么不明白'43941'不是有效的日期格式?在我看来,这是一个“天数”,价值。
-
@Neil 是它的日期格式
20/4/2020 -
但“43941”和“20/4/2020”不格式相同。您的代码期望“M/dd/yyyy”形式的值,而字符串“43941”肯定与该模式不匹配。听起来您根本不想将其解析为日期-您想将其解析为 number (整数或双精度),然后使用
new DateTime(...).AddDays() -
我已经从帖子中删除了无效的 ASP.Net Core 标签,因为它与问题无关,并且 Excel 无法在服务器上正常运行。
标签: c# excel datetime .net-core