解析精确格式无效

时间:2014-06-24 14:54:56

标签: c# string file date datetime

我需要解析一个字符串并将其转换为DateTime。我有以下代码段:

using (StreamReader reader = new StreamReader(fichier))
{
    while ((item = reader.ReadLine()) != null)
    {
        string[] table = item.Split('\t');
        string _date = table[2];
        pointages.Add(DateTime.ParseExact(_date,"yyyy-MM-dd-hh:mm:ss", CultureInfo.InvariantCulture,DateTimeStyles.None));
    } 
}

EDIT2

文件内容:

917          2014-06-24-07:43:47     Finger

字符串_date =2014-06-24-07:43:47。当我执行程序时,我得到了这个例外: String was not recognized as a valid DateTime.

修改

当我在此之前添加一行时:

  while ((item = reader.ReadLine()) != null)
                {
                    string[] table = item.Split('\t');
                    string _date = table[2];
                    _date ="2014-06-24-07:43:47";
                    pointages.Add(DateTime.ParseExact(_date,"yyyy-MM-dd-hh:mm:ss", CultureInfo.InvariantCulture,DateTimeStyles.None));
                } 

它有效!!!

  • 出现此错误的原因是什么?
  • 我该如何解决?

1 个答案:

答案 0 :(得分:1)

您的示例字符串适用于我,因此它必须是不同的字符串。使用调试器。也许它实际上使用了像17:43:47这样的24小​​时时钟,那么您需要HH代替hh

  

你:不,它确实是我发布的字符串。

这是不可能的。也许它有前导或尾随空格,首先使用Trim

_date = _date.Trim();

Trim不仅会删除空格,还会删除属于SpaceSeparatorLineSeparatorParagraphSeparator条件的所有字符。所以也许它是一个标签或其他什么。请查看Char.IsWhiteSpace使用的String.Trim的备注部分。

旁注:如果您不知道格式是否有效,则可以使用DateTime.TryParseExact而不是引发异常,但如果字符串无法返回false被解析为DateTime

bool couldBeParsed = DateTime.TryParseExact(
    _date.Trim(), 
    "yyyy-MM-dd-HH:mm:ss", 
    CultureInfo.InvariantCulture, 
    DateTimeStyles.None,
    out dt);