【问题标题】:Date is returned incorrectly from excel sheet日期从 excel 表返回不正确
【发布时间】:2015-02-05 01:00:41
【问题描述】:

我有一个包含一些数据的 Excel 表。在其中我有一个日期列。当我阅读日期列的 Excel 工作表时,它返回的日期不正确(日期格式月/日/年)。

以下是 Excel 工作表中日期值的示例

01/01/2014

以及从 C# 读取的日期值:

1/1/2014

但它正确解析了日期05/24/2015

所以当我TryParseExact 它的有效日期时,它总是返回 false。有什么好的办法可以解决这个问题吗?

更新:

if (!DateTime.TryParseExact(row["ColoumnNo"].ToString(), "MM/dd/yyyy", CultureInfo.InvariantCulture, DateTimeStyles.None, out date)) <br>
{
    //code
}

【问题讨论】:

  • 2014 年 1 月 1 日的基础 DateTime 值与 2014 年 1 月 1 日相同;似乎它只是格式的问题。最好的问候,
  • DateTime.TryParseExact(row["ColoumnNo"].ToString(), "MM/dd/yyyy", CultureInfo.InvariantCulture, DateTimeStyles.None, out data);我给了这样的@AlexBell。但它在上述日期返回 false。
  • 如果您指定 mm/dd/yyyy INPUT 掩码但以 m/d/yyyy 的形式提供输入,它似乎使感觉它会失败。
  • @Jeeped:在 Excel 工作表中,它的格式为 01/01/2014,但当它读取该值时,它返回 1/1/2014。
  • 能否请您发布一个导致问题的完整代码sn-p?很难讨论一些看不见的东西。谢谢和问候,

标签: c# .net excel date c#-4.0


【解决方案1】:

当您查看 Excel 工作表时,您会看到以下格式:MM/dd/yyyy。您的日期只是由 excel 中的格式化程序以该格式显示。在引擎盖下它是一个日期类型。当您在 c# 中将日期读取为字符串时,您会从日期类型 M/d/yyyy 中获得以下格式。因此,您必须将 TryParse 的掩码更改为:“M/d/yyyy”。您可以更好地直接从 excel 表中读取值作为日期,如果您更改文化,您将从 excel 表中读取其他日期格式。

【讨论】:

    【解决方案2】:

    正如其他人所暗示的,您最好完全避免这个问题,相信 Excel 会告诉您是否有日期。 Range.Valueobject 类型,如果 Excel 将内容识别为日期,将返回 DateTime。所以你的代码可以写成:

    var value = row[".."].Value;
    
    if (value is DateTime)
    {
        var date = (DateTime)value;
        //code
    }
    

    【讨论】:

      猜你喜欢
      • 2017-04-09
      • 2015-12-14
      • 2020-02-16
      • 1970-01-01
      • 1970-01-01
      • 2019-12-03
      • 1970-01-01
      相关资源
      最近更新 更多