更改文化失败日期时间转换

时间:2012-11-01 13:15:13

标签: c# culture

DateTime令人沮丧的问题,我们有一个带有日期选择器的部分,如果将​​文化设置为en-GB且日期是01/11/2012(dd / mm / yyyy),则将文化交换为中文(zh-CN)日期以旧文化格式传递,当它转换为DateTime时,日期时间变为2012/1/11,此时文化应为(yyyy / mm / dd)。

这似乎是我遇到转换出错的唯一文化,因为它应该是2012/11/1,因为11是月份。

有没有人知道为什么它没有正确转换?

很抱歉,这是我的错,因为不够清楚,需要更多细节。

我们有一个报告表单,允许用户选择日期范围,在我们使用的表单上使用日期范围选择器(http://www.filamentgroup.com/lab/update_date_range_picker_with_jquery_ui/)来填充一个只读文本框提交过滤结果。用户可以从下拉列表中选择他们当前的文化(我们的用户需要,因为他们希望在不更改浏览器设置的情况下轻松地在英文和中文之间切换,如果文化是en-GB,则日期范围字符串可能显示为“01/01 / 2012- “2012年1月1日 - 2012年11月1日” - 2012年11月1日。这存储在网址中,例如:& DateRange = 01%2F01%2F2012 + --- + 01%2F11%2F2012。

现在,如果用户切换到中文,它会调用当前页面,其中包含所有相同的查询参数,但也更改了culture参数(我们允许文化被URL参数覆盖),这意味着日期格式01/11/2012当我们使用:

传递时,它位于查询字符串中
DateTime.TryParse(endDateString, out endDate);

DateTime对象包含2012年1月11日而不是2012年11月1日的日期。

有没有办法可以存储日期字符串所在的文化信息,并在交换文化时使用它来转换为新的文化信息?

任何更好的想法都会受到高度赞赏,从en-GB换到en-IN(印度)似乎工作得很好,就像交换到es-MX(墨西哥)一样。它似乎只是中文,但根据这些语言的日期格式,这可能是运气好的。

非常感谢您花时间阅读本文。

2 个答案:

答案 0 :(得分:0)

在这种情况下,如果您不处理日期时间并仅存储它,请使用字符串来移动日期时间。之后,您可以在将格式存储到数据库之前更改格式。

答案 1 :(得分:0)

DateTime.TryParse(endDateString, out endDate);

正在使用服务器上默认的文化。

基本解决方案是:

var ci = GetCultureInfoFromRequest();
DateTime.TryParse(endDateString, out endDate, ci);