【问题标题】:InvalidCastException convert string to DateTimeInvalidCastException 将字符串转换为 DateTime
【发布时间】:2015-12-01 02:26:58
【问题描述】:

基本上尝试读取文件并将其从 7 列更改为 5 列,并更改日期格式。应该补充一点,我使用的是 linqpad,语言是 C# 语句。

代码:

string txtFolderPath = @"D:\Testing\BM\";
string[] files = Directory.GetFiles(txtFolderPath, "cplt.csv", SearchOption.AllDirectories);
//files.Dump();

foreach (string file in files)
{
    // reading in csv file
    var csvData = from row in new CpltData(@file, 1000000, 1000000, "") 
    //@"C:\Miu\Blue Fin III - A\Blue Fin III - A\cplt.csv"

    select new
    {
        Period = row.Period,
        IndexEltId = row.IndexEltId,
        EventId = row.EventId,
        Date = row.Date.ToString("dd-MMM-yyyy HH.mm.ss"),
        Payout = row.Payout
    };

    //csvData.Dump();

    Util.WriteCsv(csvData, @file);

}

错误消息:InvalidCastException 无法转换值 '8/22/2015 1:19:01 AM' 到第 2 行中的 DateTime

以下行发生错误:

var csvData = from row in new CpltData(@file, 1000000, 1000000, "")

CpltData(string csvFilePath, int noOfPeriods, double principal, string currency)

它是从某个 dll 导入的,不知道如何访问它:/

【问题讨论】:

  • 你能显示CpltData类的代码吗?
  • 你在哪一行得到这个异常?
  • @juharr - 见上文,也请见上文
  • 无论CplData 是什么,这就是问题所在。如果不了解更多信息,我们无法真正帮助您。

标签: c# linq datetime linqpad


【解决方案1】:

错误消息非常清楚:您正在使用一个非常好的DateTime 变量,将其转换为字符串,然后您尝试将该字符串分配给另一个DateTime 变量。那不计算。

DateTime 变量中没有“日期格式”之类的东西。

DateTime 只是在内部表示中保存一个日期,这与您可能对年、月等的任何概念完全无关。“日期格式”是您在显示 @ 时使用的东西987654325@.

所以,只需将您的row.Date 分配给您的Date,您就完成了这段代码。

稍后,当需要显示 Date 时,然后应用“日期格式”。

【讨论】:

  • 问题是我需要把它改成正确的格式,dd-MMM-yyyy HH.mm.ss,这样我就可以把这个excel文件和另一个excel文件比较了。
  • @user4659009 那里没有格式。这只是一个时间点。当您在 Util.WriteCsv 函数中将其写出时,格式就会出现。
  • 看起来像是在神秘的CpltData 类中生成的自定义错误。谁知道它是如何尝试将该文件的数据解析为DateTime
  • @KyleW 哦,我明白了,你可能是对的。所以,在这种情况下,需要修改的大概是excel电子表格中对应列的单元格格式。无需转换任何数据。
猜你喜欢
  • 2021-03-31
  • 2011-10-16
  • 2016-03-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多