Timespan返回错误的值

时间:2016-09-29 19:49:24

标签: c# timespan

我的应用程序有多种语言。我有一个问题,我将日期从美国标准转换为我们在巴西使用的日期,我正在使用它。

DateTime dataCredito = DateTime.Parse(txtDtCredito.Text);
if (Culture == "English (United States)")
{
    string dataConvertida = dataCredito.ToString("dd/MM/yyyy");
    dataCredito = Convert.ToDateTime(dataConvertida);
}

但是在计算出时间跨度之后

 TimeSpan ts = dataNota - dataCredito;

dataNota是2016年10月9日 和dataCredito是05/10/2016

这是一个4天的差异,但是时间跨度正在计算方法,因为月份是05和09,差异大约是123天,使用美国标准。

如何更改此设置以正确获取时间范围(本案例为4天)?

3 个答案:

答案 0 :(得分:1)

问题是您将文本转换为DateTime对象的方式。通过不通知方法,您希望如何转换 - 您隐式允许转换基于您自己的语言环境完成,当您应该以这种方式明确说明格式时:

DateTime dataCredito = DateTime.ParseExact("09/10/2016","dd/MM/yyyy",CultureInfo.InvariantCulture);

显然你应该用你的文字输入替换“09/10/2016”,如果你需要支持单位数而不是使用“d / M / yyyy”格式。

答案 1 :(得分:1)

为了正确解析DateTime,您需要使用DateTime.Parse(String, IFormatProvider)的{​​{1}}重载。

当您尝试使用特定于文化的表示法解析任何其他数据类型时,同样适用。

答案 2 :(得分:-3)

我管理来解决这个问题。

我只是在时间跨度之前添加它,现在时间跨度返回正确的4。

if (Culture == "English (United States)")
                    {
                       string dataAmericana = dataCredito.ToString("dd/MM/yyyy");
                       dataCredito = Convert.ToDateTime(dataAmericana);
                       string dataNotaNova = dataNota.ToString("dd/MM/yyyy");
                        dataNota = Convert.ToDateTime(dataNotaNova);
                    }
                    TimeSpan ts = dataNota - dataCredito;