首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Timespan返回错误的值

Timespan返回错误的值
EN

Stack Overflow用户
提问于 2016-09-30 03:49:24
回答 3查看 561关注 0票数 0

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

代码语言:javascript
复制
DateTime dataCredito = DateTime.Parse(txtDtCredito.Text);
if (Culture == "English (United States)")
{
    string dataConvertida = dataCredito.ToString("dd/MM/yyyy");
    dataCredito = Convert.ToDateTime(dataConvertida);
}

但是在我计算了一个时间跨度之后

代码语言:javascript
复制
 TimeSpan ts = dataNota - dataCredito;

dataNota为2016年9月10日,dataCredito为2016年5月10日

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

如何更改此设置以正确获取时间跨度(本例中为4天)?

EN

回答 3

Stack Overflow用户

发布于 2016-09-30 04:07:45

问题在于将文本转换为DateTime对象的方式。通过不通知方法,您希望如何转换它-您隐含地允许基于您自己的区域设置完成转换,而您应该以这种方式显式地说明格式:

代码语言:javascript
复制
DateTime dataCredito = DateTime.ParseExact("09/10/2016","dd/MM/yyyy",CultureInfo.InvariantCulture);

显然,您应该将"09/10/2016“替换为您的文本输入,如果您需要支持单个数字,请使用"d/M/yyyy”格式。

票数 1
EN

Stack Overflow用户

发布于 2016-09-30 04:08:44

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

当您尝试使用特定于区域性的表示形式分析任何其他数据类型时,这一点同样适用。

票数 1
EN

Stack Overflow用户

发布于 2016-09-30 04:07:38

我设法解决了这个问题。

我只是在timespan之前添加了这个,现在timespan返回正确的4。

代码语言:javascript
复制
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;
票数 -3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39778816

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档