繁体   English   中英

c# 中的 DateTime 解析:获取“System.FormatException:”String 未被识别为有效的 DateTime”错误

[英]DateTime parsing in c#:getting a 'System.FormatException: 'String was not recognized as a valid DateTime' error

我在本地文件夹的 .csv 文件中有一个数据集,下面是数据的示例行,每个项目有 13 个属性。

我正在用 C# 解析这些数据,我的代码已经工作了 2 年,我不记得了

读取.csv 文件的代码是,这部分是将数据解析成compiledList。

static string loadFile(string fileLocation)
    {
        string text = "";

        try
        {
            text = File.ReadAllText(fileLocation);
        }
        catch (Exception e)
        {
            Console.WriteLine("An error has occured...");
            Console.WriteLine(e.Message);
        }

        return text;
    }
    static ConcurrentBag<Item> interpretFile(string text, ConcurrentBag<Item> compiledList)
    {
        String[] substrings = text.Split('\n');
        int settlementPeriod = -1;   int totalSP = -1;

        foreach (string line in substrings)
        {
            String[] items = line.Split(',');
            if (items[0] == "HDR")
            {
                settlementPeriod = int.Parse(items[3]);
                if (settlementPeriod > 48)
                    settlementPeriod -= 48;
                if (settlementPeriod < 0)
                    settlementPeriod += 48;

                totalSP = getTotalSettlementPeriod(DateTime.ParseExact(items[2], "yyyyMMdd", null), settlementPeriod);
            }
            if (items[0] == "BOALF")
            {
                //Item Bid = new Item(items);
                Item Bid = new Item
                {
                    recordType = items[0],
                    unitID = items[1],
                    acceptID = float.Parse(items[2]),
                    acceptTime = DateTime.ParseExact(items[3], "yyyyMMddHHmmss", null),
                    deemedFlag = ToBoolean(items[4]),
                    soFlag = ToBoolean(items[5]),
                    storFlag = ToBoolean(items[6]),
                    fromTime = DateTime.ParseExact(items[7], "yyyyMMddHHmmss", null),
                    fromLevel = float.Parse(items[8]),
                    toTime = DateTime.ParseExact(items[9], "yyyyMMddHHmmss", null),
                    toLevel = float.Parse(items[10]),
                    settlementPeriod = settlementPeriod,
                    totalSP = totalSP
                };
                compiledList.Add(Bid);

.csv 中的示例项目是:

在此处输入图片说明

当我在 Notebad 中打开数据集时,我看到的是:

在此处输入图片说明

请注意, items[0]是 about 样本数据集中的第一列。 我现在遇到问题的数据是第 4 列,即上面显示的“2.02E+13”。

那实际上是'20191211202600',它是数字格式的'yyyymmddhhmmss'。 我不知道发生了什么变化,以至于下面给了我一个错误。

acceptTime = DateTime.ParseExact(items[3], "yyyyMMddHHmmss", null)

`

我得到的错误是:

System.FormatException: 'String 未被识别为有效的 DateTime。'

感谢您的帮助,如果需要进一步说明,请告诉我。

谢谢

我不认为问题出在您的 C# 代码上,包含日期格式yyyymmddhhmmss的列应该是字符串类型,现在它们被视为数字。 这个问题是由您保存 CSV 文件(例如 excel 或 google 电子表格)的程序引起的,您需要将列数据类型更改为字符串(因为它现在会自动检测为数字)。

以下在 .NET fiddle ( https://dotnetfiddle.net/ ) 中有效,您能否验证在DateTime.ParseExact调用中使用的字符串? 也许该字符串不等于您在运行时所期望的。

using System;

public class Program
{
    public static void Main()
    {
        Console.WriteLine(DateTime.ParseExact("20191211202600", "yyyyMMddHHmmss", null));
    }
}

输出是:

12/11/2019 8:26:00 PM

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM