1

我有一个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);

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

4

3 回答 3

4

您正在尝试准确解析字符串- 您的字符串包含格式字符串中不存在的秒组件。您的字符串还包含:您指定的位置.

以下应该有效:

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

请注意,h格式说明符将正确理解8or 08

此外,您可以简单地使用标准TimeSpan格式字符串之一- 特别是gORc而不是自定义格式字符串:

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

TimeSpan.ParseExact(dtTest.Rows[2][2].ToString(), 
    "c", CultureInfo.InvariantCulture);
于 2012-11-05T10:30:12.807 回答
1

试试这个:

TimeSpan s = TimeSpan.ParseExact(dtTest.Rows[2][2].ToString(), "g", CultureInfo.CurrentCulture);
于 2012-11-05T10:29:38.460 回答
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);
}
于 2012-11-05T10:31:04.130 回答