[英]Why datetime can't recognise the string?
在此代码中, 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);
}
今天,我经历了许多有关日期时间问题的问答,但发现没有什么可以解决这个奇怪的问题。 任何想法我的代码有什么问题吗?
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解析库,该库可以为您处理值周围的引号和日期/时间解析。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.