输入字符串的格式不正确。在改变文化的IE中调用TimeSpan.FromSeconds(Convert.ToDouble(time))

时间:2012-10-11 08:30:06

标签: c# asp.net internet-explorer multilingual culture

您好我使用下面给出的方法将其转换为字符串其工作精细铬,但在IE中它通过异常输入字符串的格式不正确。在此行

 s = TimeSpan.FromSeconds(Convert.ToDouble(time));

这些是我传递给它的价值

600, 298.8, 65505, 69, 70, 20.5, 20.5, 20.5, 20.5, 1840.4, 682, 1040.3

在chrome工作但是在IE中,当我将文化改为法语时,它会给出第二个值的异常请帮我解决问题

public static String ConvertTimeToString(this string time)   
{

    if (String.IsNullOrEmpty(time))
    {
        return time;
    }

    TimeSpan s;

    if (time.IndexOf(':') >= 0)
    {
        s = TimeSpan.Parse(time);
    }
    else
    {
        s = TimeSpan.FromSeconds(Convert.ToDouble(time));
    }

    return s.ConvertTimeToString();
}    

2 个答案:

答案 0 :(得分:1)

失败可能在电话Convert.ToDouble中。您的代码可能在CultureInfo中执行,其中包含','作为小数分隔符,但您的值使用'。'。我建议您使用具有'。'的CultureInfo来使用Double.TryParse。改为小数分隔符:

Double value;
if (Double.TryParse(time, NumberStyles.Any, CultureInfo.GetCultureInfo("en-US"), out value))
{
    s = TimeSpan.FromSeconds(value);
}

答案 1 :(得分:1)

使用IFormatProvider时需要指定Convert.ToDouble(time)

Convert.ToDouble(time, CultureInfo.InvariantCulture)

指定CulturInfo.InvariantCulture指定将浮点写为1.234的文化(请注意句点)。问题的根源可能是您time的格式为1,234(请注意逗号)。或者反过来说:你没有指定IFormatProvider,你当前的文化ASP.NET进程使用逗号作为小数分隔符,但提供的字符串使用句点?

如果使用的小数点不一致,您应该在源处修复它(不确定源是什么)或作为最后的手段,您可以按句点替换逗号:

Convert.ToDouble(time.Replace(",", ".") , CultureInfo.InvariantCulture)

但是,尝试解析字符串而不知道期望什么并不是最好的事情。