我有一个具有多种语言的应用程序。我在将日期从美国标准转换为我们在巴西使用的标准时遇到了一个问题,我正在使用这个。
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年9月10日,dataCredito为2016年5月10日
这是一个4天的差异,但时间跨度是计算方法,因为月是05和09,差异约为123天,使用美国标准。
如何更改此设置以正确获取时间跨度(本例中为4天)?
发布于 2016-09-30 04:07:45
问题在于将文本转换为DateTime对象的方式。通过不通知方法,您希望如何转换它-您隐含地允许基于您自己的区域设置完成转换,而您应该以这种方式显式地说明格式:
DateTime dataCredito = DateTime.ParseExact("09/10/2016","dd/MM/yyyy",CultureInfo.InvariantCulture);显然,您应该将"09/10/2016“替换为您的文本输入,如果您需要支持单个数字,请使用"d/M/yyyy”格式。
发布于 2016-09-30 04:08:44
为了正确解析DateTime,您需要使用DateTime.Parse()的DateTime.Parse(String, IFormatProvider)重载。
当您尝试使用特定于区域性的表示形式分析任何其他数据类型时,这一点同样适用。
发布于 2016-09-30 04:07:38
我设法解决了这个问题。
我只是在timespan之前添加了这个,现在timespan返回正确的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;https://stackoverflow.com/questions/39778816
复制相似问题