1

私は .net Framework 4.0 を使用しており、コンソール アプリを開発しています。

私の地域設定はen-usに設定されています。

エラーが発生します:

文字列は有効な DateTime として認識されませんでした。

次のコードで。

DateTime time = XmlConvert.ToDateTime("2013-11-08T08:08:32+5.5", "yyyy-M-dTH:m:sz");

Windows 2008 R2 サーバーでアプリをテストしています。

4

1 に答える 1

3

.5あなたのコードはビットを考慮していません(小数点zのない部分だけを処理します)。+5修正版:

DateTime time = XmlConvert.ToDateTime("2013-11-08T08:08:32+5.5", "yyyy-M-dTH:m:sz.f");

アップデート

コメントを介してdigEmAllによって正しく指摘されているように、提案された.f修正は問題を回避しますが、日付は適切に考慮されていません. 修飾子は、.f(この場合のように) 秒から離れた位置にある場合でも、常に秒の端数を参照します。の分数は、修飾子にz依存し、に変換して提供する必要があります。:zzzz

したがって、前述のコードは、正確な結果を提供しませんが、OP の条件 (技術的に言えば、入力として間違った日付形式を使用する) の実用的なソリューションを表しています。そのためには、入力形式を事前に変更する必要があります。つまり、次のようになります。

string input = "2013-11-08T08:08:32+5.5";
string format = "yyyy-M-dTH:m:sz";
string correctedInput = input;
string correctedFormat = format;
string[] temp = input.Split('.');
if (temp.Length == 2 && temp[1].AsEnumerable().Select(x => char.IsDigit(x)).Count() == temp[1].Length)
{
    correctedInput = temp[0] + ":" + Convert.ToString(Math.Round(60 * Convert.ToDecimal(temp[1]) / 10, 2));
    correctedFormat = "yyyy-M-dTH:m:szzz";
}
DateTime time = XmlConvert.ToDateTime(correctedInput, correctedFormat);
于 2013-11-10T10:29:36.820 に答える