0

嗨,我使用下面给出的方法将其转换为字符串,其工作正常,但在 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();
}    
4

2 回答 2

1

失败很可能是在通话中Convert.ToDouble。您的代码可能在具有“,”作为小数分隔符的 CultureInfo 中执行,但您的值使用“。”。我建议您使用Double.TryParse具有“。”的 CultureInfo。作为小数分隔符:

Double value;
if (Double.TryParse(time, NumberStyles.Any, CultureInfo.GetCultureInfo("en-US"), out value))
{
    s = TimeSpan.FromSeconds(value);
}
于 2012-10-11T08:36:54.640 回答
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)

但是,尝试解析字符串却不知道会发生什么并不是最好的做法。

于 2012-10-11T08:37:27.363 回答