我的应用程序有多种语言。我有一个问题,我将日期从美国标准转换为我们在巴西使用的日期,我正在使用它。
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天)?
答案 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;