asp.net中excel工作表的日期时间解析

asp.net中excel工作表的日期时间解析,asp.net,datetime,Asp.net,Datetime,我想从excel工作表中获取日期时间值,并获取最高和最低日期 我阅读excel表格并将其放入数据表: 我尝试了以下代码: protected void CheckTheFP(DataTable data) { if (data.Rows.Count != 0) { DateTime ds = new DateTime(); err.Text = DateTime.TryParseExact(data.Row

我想从excel工作表中获取日期时间值,并获取最高和最低日期

我阅读excel表格并将其放入数据表: 我尝试了以下代码:

protected void CheckTheFP(DataTable data)
    {
        if (data.Rows.Count != 0)
        {
            DateTime ds = new DateTime();

            err.Text = DateTime.TryParseExact(data.Rows[0][2].ToString(), "MM/dd/yy hh:mm tt",
               CultureInfo.InvariantCulture,
               System.Globalization.DateTimeStyles.None,
               out ds) + "" ;

        }
    }
但我总是很虚伪。。。不知道为什么

有没有办法对这个数据表进行排序,或者取最高和最低的日期


这是我从中读取的excel工作表。此格式字符串应该可以工作:
“M/dd/yy h:mm tt”
。我使用单M是因为月份有一个数字,同样的情况也适用于小时。我使用了
CultureInfo.InvariantCulture
来防止所有
/
都被替换为实际的日期分隔符(以防它不同)

您可以使用LINQ:

var allDateTimes = data.AsEnumerable()
    .Select(row => DateTime.ParseExact(row.Field<string>("Time"), "M/dd/yy h:mm tt", CultureInfo.InvariantCulture));
DateTime min = allDateTimes.Min();
DateTime max = allDateTimes.Max();
编辑:你:“当我在2014年11月2日下午4:42尝试使用它时,你会看到11不是M datetime格式

月份不是问题。请改用单
d
,因为日期也可以有一个位数


所以:
“M/d/yy h:mm tt“

我收到了以下错误:说明:在执行当前web请求期间发生了未经处理的异常。请查看堆栈跟踪以了解有关错误的更多信息以及错误在代码中的起源。异常详细信息:System.FormatException:字符串未被识别为有效的日期时间。第二line@SamySammour:我已经在DataTable中使用您的示例字符串对其进行了测试,它可以正常工作。是否还有其他字符串,可能是空字符串?然后你应该使用
TryParseExact
。我也尝试过,但总是给出我的错误答案。。。当我使用用户DateTime.Parse时,它给了我一个错误:字符串未被识别为有效的DateTime。没有空值,所有值都来自=NOW()fromexcel@SamySammour:您始终可以在上面的“我的代码”中的
return null
处设置断点。然后您会看到无法解析的值。也许您需要使用
Trim
string time=row.Field(“time”).Trim()如果在开头或结尾有一个空白你看不到。它现在工作了。。。我想问题已经解决了,正如你说的谢谢
IEnumerable<DateTime> allDateTimes = data.AsEnumerable()
  .Select(row => {
     string time = row.Field<string>("Time").Trim();
     DateTime dt;
     if (DateTime.TryParseExact(time, "M/dd/yy h:mm tt", CultureInfo.InvariantCulture, DateTimeStyles.None, out dt))
        return (DateTime?) dt;
     return null;  // set a breakpoint here to see which value could not be parsed
  })
  .Where(dt => dt.HasValue)
  .Select(dt => dt.Value);
DateTime min = allDateTimes.Min();
DateTime max = allDateTimes.Max();