0

record.Time の値は「11/01/2012 11:38:01:296」です。

string[] capturetime = record.Time.Split(':');
string captime = capturetime[0] + ":" + 
                 capturetime[1] + ":" + 
                 capturetime[2] + "." + 
                 capturetime[3];
DateTime rightTime = Convert.ToDateTime(captime);

2 行目の実行後、captime の値は "11/01/2012 11:38:01.296" であり、最後の行にエラーが表示されます: "インデックスと長さは文字列内の場所を参照する必要があります。パラメータ名: lengthmscorlib"

理由がわかりません。以前は問題なく動作していたので:(誰でもこれを説明できますか?tksそんなに

解決しました。皆さん、どうもありがとう:)

コード :

 string[] capturetime = newRecord.Time.Split(':');
                string captime = capturetime[0] + ":" + capturetime[1] + ":" + capturetime [2] + "." + capturetime[3];
                DateTime righttime;

                if(time[3].Length == 2)
                {
                    righttime = DateTime.ParseExact(captime, "MM/dd/yyyy hh:mm:ss.ff",
                                                     CultureInfo.InvariantCulture);
                } else
                {
                    righttime = DateTime.ParseExact(captime, "MM/dd/yyyy hh:mm:ss.fff",
                                                    CultureInfo.InvariantCulture);
                }

これらのコードを最適化するためのアイデアはありますか????

アップデート :

それは私ですか、それとも私のVisual Studioはクレイジーですか??? 上記の新しいコードは、古いコードと同じように、古いコードに戻したときに例外が発生しました。それは昔のようにうまく動作します..wthはこれです:(

4

4 に答える 4

2

使用できます

string dateString =  "11/01/2012 11:38:01:296";    
DateTime date = DateTime.ParseExact(dateString , "MM/dd/yyyy hh:mm:ss:fff",
                                                CultureInfo.InvariantCulture);
于 2012-11-01T05:11:05.857 に答える
0

これを解決する最善の方法は、CultureInfo/DateTimeFormat 文字列を使用することだと思います。

ただし、奇妙な理由でそれが当てはまらない場合は、これを行う大まかな方法​​を次に示します。

        string val = @"11/01/2012 11:38:01:296";
        string[] parts = val.Split(' ');
        var dt = DateTime.ParseExact(parts[0], "dd/MM/yyyy", new DateTimeFormatInfo());
        double[] times = parts[1].Trim().Split(':').Select(s => double.Parse(s)).ToArray();
        dt = dt.AddHours(times[0]);
        dt = dt.AddMinutes(times[1]);
        dt = dt.AddSeconds(times[2]);
        dt = dt.AddMilliseconds(times[3]);

        // OR -- dt.AddMilliseconds(times[0] * 60 * 60 * 1000 + times[1] * 60 * 1000 + times[2] * 1000 + times[3]);
于 2012-11-01T06:43:02.987 に答える
0

よく見ると、与えられた時間には最後のコロンがありません。通常の基準では、ドットになります。RecordTime の値を正しく確認してください。

「11/01/2012 11:38:01:296」は間違っています 「11/01/2012 11:38:01.296」は正しいです

したがって、captureTime のインデックスが間違っています。0、1、2 になります。3 は範囲外です。

于 2012-11-01T05:01:40.840 に答える
0

すべての文字列分割を行わずに、 DateTime.ParseExact(val, "MM/dd/yyyy HH:mm:ss:fff", new DateTimeFormatInfo()) を使用するだけです。

于 2012-11-01T05:19:33.683 に答える