在此代码中item.date_time
看起来像" 2017-10-18T04:57:39.000Z"。当我把这个(或任何其他类似的字符串)而不是item.date_time
- 它运作良好。但是尽管item.date_time
等于这样的字符串这一事实 - 它在我使用它时会调用System.FormatException。
static void Main(string[] args)
{
eventList = new List<CsvFile>();
StreamReader sr = new StreamReader("logs.csv");
string data = sr.ReadLine();
while (data != null)
{
string[] line = data.Split(',');
ReadString(line);
data = sr.ReadLine();
}
}
class CsvFile
{
public String date_time;
public DateTime datetime;
}
static void ReadString(String[] str)
{
CsvFile item = new CsvFile();
item.date_time = str[0];
item.datetime = DateTime.ParseExact(item.date_time, "yyyy-MM-ddTHH:mm:ss.000Z", CultureInfo.InvariantCulture);
eventList.Add(item);
}
我今天经历了关于日期时间问题的几十个问题和答案,但发现没有什么可以解决这个奇怪的事情。任何想法我的代码有什么问题?
答案 0 :(得分:2)
str [0]等于
"\"2017-10-18T04:57:39.000Z\""
你的字符串有引号(因此\"
指标)。在解析之前修剪它们:
item.date_time = str[0].Trim('"');
item.datetime = DateTime.ParseExact(item.date_time, "yyyy-MM-ddTHH:mm:ss.000Z", CultureInfo.InvariantCulture);
您可以考虑使用TryParseExact
,这样您就可以确定解析是否成功并显示更好的错误消息(比如您正在使用哪条记录,输入值是什么等)而不是抛出异常
另一种方法是使用CSV解析库,它可以处理值周围的引号和解析日期/时间。