繁体   English   中英

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

[英]Input string was not in a correct format. calling TimeSpan.FromSeconds(Convert.ToDouble(time)) in IE on Changing 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();
}    

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

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

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

Convert.ToDouble(time, CultureInfo.InvariantCulture)

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM