在多元文化 Web 应用程序上进行灵活的日期时间解析
本文关键字:日期 时间 文化 Web 应用 程序上 应用程序 | 更新日期: 2023-09-27 18:34:30
我有一个 ASP.NET 的Web应用程序,它是多元文化的,这意味着我有en-us
,en-ca
,fr-ca
等。
我的问题是当我尝试使用 DateTime.Parse
解析日期1/22/2014
并且我正在使用 en-us
时,它会起作用,因为en-us
的ShortDatePattern
是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。
如果您绝对确定用户的文化 - 并且他们实际上会使用它 - 您可以使用:
// I assume that Culture is a valid reference to a CultureInfo...
DateTime date = DateTime.Parse(date, Culture);
但是,我强烈建议在页面上提供日历控件或单独的年/文本月/日字段(带验证(,以便您发布回 ASP.NET 的内容可以是机器可读的、与区域性无关的日期格式,例如 yyyy-MM-dd
.基本上,尽早将区分区域性的表示形式转换为与区域性无关的表示形式。
如果用户可以在您的应用程序中选择多种语言,我认为满足多种语言选择会更容易。
这是我前段时间所做的:
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您喜欢的输出显示。