1

私は持っていDataTable dtTestます。

このテーブルの行2と列2の1つのセルを解析したいこのセルの形式は次のとおりです。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);

フォーマット指定子がorhを正しく理解することに注意してください。808

さらに、標準のTimeSpanフォーマット文字列の 1 つを使用することもできます。具体的には、カスタム フォーマット文字列の代わりにgORを使用できます。c

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
// 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 に答える
1

これを試して:

TimeSpan s = TimeSpan.ParseExact(dtTest.Rows[2][2].ToString(), "g", CultureInfo.CurrentCulture);
于 2012-11-05T10:29:38.460 に答える