我需要解析一个字符串并将其转换为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));
}
它有效!!!
答案 0 :(得分:1)
您的示例字符串适用于我,因此它必须是不同的字符串。使用调试器。也许它实际上使用了像17:43:47
这样的24小时时钟,那么您需要HH
代替hh
。
你:不,它确实是我发布的字符串。
这是不可能的。也许它有前导或尾随空格,首先使用Trim
:
_date = _date.Trim();
Trim
不仅会删除空格,还会删除属于SpaceSeparator
,LineSeparator
或ParagraphSeparator
条件的所有字符。所以也许它是一个标签或其他什么。请查看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);