使用TimeSpan.ParseExact解析时,输入字符串的格式不正确

时间:2012-11-05 10:25:10

标签: c# datatable timespan

我有DataTable dtTest

我想从第2行和第2列解析此表中的一个单元格 此单元格的格式为hh:mm:ss or h:mm:ss

我想解析它以切换到格式h.mm或hh.mm

此处我验证位置:上是否有“2”符号

string typeTime = dtTest.Rows[2][2].ToString().Substring(1, 1);

现在我解析它们:

TimeSpan.ParseExact(dtTest.Rows[2][2].ToString(), 
    typeTime == "." ? "h'.'mm" : "hh'.'mm", CultureInfo.InvariantCulture);

解析后会给我一个错误“输入字符串的格式不正确”。

3 个答案:

答案 0 :(得分:4)

您正在尝试完全解析字符串 - 您的字符串包含格式字符串中不存在的秒组件。您的字符串还包含:,您可以在其中指定.

以下内容应该有效:

TimeSpan.ParseExact(dtTest.Rows[2][2].ToString(), 
    "h':'mm':'ss", CultureInfo.InvariantCulture);

请注意,h格式说明符会正确理解808

此外,您只需使用其中一个standard TimeSpan format strings - 特别是gc而不是自定义格式字符串:

TimeSpan.ParseExact(dtTest.Rows[2][2].ToString(), 
    "g", CultureInfo.InvariantCulture);

TimeSpan.ParseExact(dtTest.Rows[2][2].ToString(), 
    "c", CultureInfo.InvariantCulture);

答案 1 :(得分:1)

试试这个:

TimeSpan s = TimeSpan.ParseExact(dtTest.Rows[2][2].ToString(), "g", CultureInfo.CurrentCulture);

答案 2 :(得分:1)

// zero based row and column index
var rows = dtTest.AsEnumerable();
var secondRow = rows.ElementAtOrDefault(1);
if (secondRow != null)
{
    String secondFieldText = secondRow.Field<String>(1);
    String format = secondFieldText.Length == 8 ? "hh:mm:ss" : "h:mm:ss";
    TimeSpan time = TimeSpan.ParseExact(secondFieldText, format, CultureInfo.InvariantCulture);
}