我有一个多文化的ASP.NET Web应用程序,这意味着我有en-us
,en-ca
,fr-ca
等。
我的问题是,当我尝试使用1/22/2014
解析日期DateTime.Parse
并且我使用en-us
时,它会起作用,因为ShortDatePattern
en-us
} M/dd/yyyy
,但如果用户为en-ca
,则ShortDatePattern
为dd/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的日期。
答案 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更改为首选输出显示。