灵活的DateTime解析多文化Web应用程序

时间:2014-12-18 07:10:53

标签: c# datetime

我有一个多文化的ASP.NET Web应用程序,这意味着我有en-usen-cafr-ca等。

我的问题是,当我尝试使用1/22/2014解析日期DateTime.Parse并且我使用en-us时,它会起作用,因为ShortDatePattern en-us } M/dd/yyyy,但如果用户为en-ca,则ShortDatePatterndd/MM/yyyy

我如何解析考虑不同文化的日期?我尝试过以下代码:

DateTime.Parse(date);
DateTime.ParseExact(date, ShortDatePattern, Culture);
DateTime.TryParseExact(date, ShortDatePattern, Culture, DateTimeStyles.None, out date);

但我仍然没有运气。

修改

DateTime.Parse抛出异常,字符串不是有效的日期时间。与DateTime.ParseExact相同。 DateTime.TryParseExact给我一个1/1/0001的日期。

2 个答案:

答案 0 :(得分:2)

如果您绝对确定用户的文化 - 而且他们实际上会使用它 - 您可以使用:

// I assume that Culture is a valid reference to a CultureInfo...
DateTime date = DateTime.Parse(date, Culture);

但是,我强烈考虑在页面上提供日历控件或单独的年/文本月/日字段(通过验证),以便您发布回ASP.NET的内容可以是机器可读的,文化 - 中性日期格式,例如yyyy-MM-dd。基本上,尽早将文化敏感的表现形式转化为文化中立的表现形式。

答案 1 :(得分:0)

如果用户可以在您的应用程序中选择多种语言,我认为更容易满足多种语言选择。

这是我之前做过的事情:

DateTime dateValue = DateTime.Parse(dateVar.ToString());
string currentCulture = XmlLanguage.GetLanguage(CultureInfo.CurrentCulture.IeftLanguageTag).ToString();
CultureInfo culture = new CultureInfo(currentCulture);

Console.WriteLine(dateValue.ToString("d", culture));

DateVar是您要转换为新文化的日期值。

上面的代码使用了System.Windows.Markup命名空间

只需将Console.WriteLine更改为首选输出显示。