【问题标题】:datetime parsing from excel sheet in asp.net从asp.net中的excel表解析日期时间
【发布时间】:2014-07-25 13:14:04
【问题描述】:

我想从 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 表

【问题讨论】:

    标签: asp.net datetime


    【解决方案1】:

    这个格式字符串应该可以工作:"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();
    

    如果您想安全起见,您应该使用TryParseExact,例如使用以下代码:

    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();
    

    编辑:你:“当我尝试在 2014 年 11 月 2 日下午 4:42 使用它时,你会看到 11 不是 M 日期时间格式

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

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

    【讨论】:

    • 我收到此错误:说明:在执行当前 Web 请求期间发生未处理的异常。请查看堆栈跟踪以获取有关错误及其源自代码的位置的更多信息。异常详细信息:System.FormatException:字符串未被识别为有效的 DateTime。在第二行
    • @SamySammour:我已经在 DataTable 中使用您的示例字符串对其进行了测试,并且可以正常工作。是否有其他字符串,也许是一个空字符串?那么你应该使用TryParseExact
    • 我也尝试过,但总是给我错误...当我使用 DateTime.Parse 时,它​​给了我错误:字符串未被识别为有效的 DateTime。并且没有空值,所有值都来自excel中的=NOW()
    • @SamySammour:你总是可以在我上面的代码中设置断点return null。然后你会看到无法解析的值。如果您看不到开头或结尾的空白,也许您需要使用Trimstring time = row.Field&lt;string&gt;("Time").Trim();
    • 它现在可以工作了......我想问题出在 Trim 上,正如你所说的,谢谢
    猜你喜欢
    • 1970-01-01
    • 2019-01-24
    • 2014-01-29
    • 2011-04-21
    • 2011-06-21
    • 2014-10-11
    • 1970-01-01
    • 2016-05-18
    相关资源
    最近更新 更多