1

我正在使用 .net Framework 4.0 并开发控制台应用程序。

我的区域设置设置为 en-us。

我收到错误:

字符串未被识别为有效的日期时间。

在以下代码上。

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 回答