我有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);
解析后会给我一个错误“输入字符串的格式不正确”。
答案 0 :(得分:4)
您正在尝试完全解析字符串 - 您的字符串包含格式字符串中不存在的秒组件。您的字符串还包含:
,您可以在其中指定.
。
以下内容应该有效:
TimeSpan.ParseExact(dtTest.Rows[2][2].ToString(),
"h':'mm':'ss", CultureInfo.InvariantCulture);
请注意,h
格式说明符会正确理解8
或08
。
此外,您只需使用其中一个standard TimeSpan
format strings - 特别是g
或c
而不是自定义格式字符串:
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);
}