このコードでitem.date_time
は "2017-10-18T04:57:39.000Z"のように見えます。 item.date_time
の代わりにこれ(または他の同様の文字列)を置くとうまくいきます。しかし、item.date_time
がこのような文字列に等しいという事実にもかかわらず - 私はそれを使用するとSystem.FormatExceptionを呼び出します。 datetimeが文字列を認識できないのはなぜですか?
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);
}
私はdatetime型の問題についての質問と回答、今日の数十を経て、この奇妙なことを解決することができ、何も見つかりませんでした。私のコードの問題は何ですか?
予想されるDateTime形式のパターンに合致しない値があることは明らかです。それが何であるか把握するためにデバッガを使います。たぶん空の行があるかスペースがあるかエンコーディングが違うか隠された文字があります....これを理解できる唯一の人はあなたです、失敗した場合は値にアクセスできます(あなたの質問に*を含めていないので*) – Igor
文字列が同じであることは間違いありませんか? 'item.date_time'は引用符やエスケープ文字を持っていますか?両者をコンソールに表示します。 – Blorgbeard
また、 'DateTime.TryParseExact'を使用し、falseを返す場合は、*その値だけをコンソールに出力してください。 –