![](/img/trans.png)
[英]System.FormatException: String was not recognized as a valid 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.