在多元文化 Web 应用程序上进行灵活的日期时间解析

本文关键字:日期 时间 文化 Web 应用 程序上 应用程序 | 更新日期: 2023-09-27 18:34:30

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

我的问题是当我尝试使用 DateTime.Parse 解析日期1/22/2014并且我正在使用 en-us 时,它会起作用,因为en-usShortDatePatternM/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。

在多元文化 Web 应用程序上进行灵活的日期时间解析

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

// 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您喜欢的输出显示。