0

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- --01/11/2012",即 2012 年 1 月 1 日 - 2012 年 11 月 1 日。这存储在 url 中,例如:&DateRange=01%2F01%2F2012+---+01%2F11%2F2012。

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

DateTime.TryParse(endDateString, out endDate);

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

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

任何更好的想法都将不胜感激,从 en-GB 交换到 en-IN(印度)似乎与交换到 es-MX(墨西哥)一样工作正常。它似乎只是中文,但这可能是基于这些语言日期格式的运气。

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

4

2 回答 2

0
DateTime.TryParse(endDateString, out endDate);

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

基本解决方案是:

var ci = GetCultureInfoFromRequest();
DateTime.TryParse(endDateString, out endDate, ci);
于 2012-11-01T15:14:38.460 回答
0

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

于 2012-11-01T13:19:14.660 回答