私は .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 サーバーでアプリをテストしています。
私は .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 サーバーでアプリをテストしています。
.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);