本地化日期格式描述符的最佳方法是什么?

来自不使用 mm/dd/yyyy 格式的文化的任何人都知道,必须以这种格式输入日期很烦人。.NET 框架提供了一些非常好的本地化支持,因此根据用户文化解析日期很简单,但您通常还希望显示有关所需格式的有用提示(特别是区分 yy 和 yyyy,它们在大多数文化)。

以对大多数用户有意义的方式执行此操作的最佳方法是什么(例如dd/M/yyy 由于大小写的变化以及一个和两个字母之间的切换而令人困惑)。

有帮助吗?

解决方案 3

这是我目前的方法。有什么建议么?

Regex singleMToDoubleRegex = new Regex("(?<!m)m(?!m)");
Regex singleDToDoubleRegex = new Regex("(?<!d)d(?!d)");
CultureInfo currentCulture = CultureInfo.CurrentUICulture;

// If the culture is netural there is no date pattern to use, so use the default.
if (currentCulture.IsNeutralCulture)
{
    currentCulture = CultureInfo.InvariantCulture;
}

// Massage the format into a more general user friendly form.
string shortDatePattern = CultureInfo.CurrentUICulture.DateTimeFormat.ShortDatePattern.ToLower();
shortDatePattern = singleMToDoubleRegex.Replace(shortDatePattern, "mm");
shortDatePattern = singleDToDoubleRegex.Replace(shortDatePattern, "dd");

其他提示

只需使用 ISO-8601. 。这是一个国际标准。

Date and time (current at page generation) expressed according to ISO 8601:
Date:                           2014-07-05
Combined date and time in UTC:  2014-07-05T04:00:25+00:00
                                2014-07-05T04:00:25Z
Week:                           2014-W27
Date with week number:          2014-W27-6
Ordinal date:                   2014-186

我必须同意 OP 的“错误”日期确实与我的 DD/MM/YYYY 成长经历格格不入,而且我发现 ISO 8601 日期和时间非常容易使用。这一次标准是正确的并且 工程技术 有明显的答案,不需要本地化。

我本来打算将堆栈溢出上的生日输入表单作为一个错误报告,因为它对世界上大多数人来说是多么令人痛苦。

国际标准的问题在于几乎没有人使用它们。我尽我所能尝试,但在现实生活中几乎所有地方我都被迫使用 dd/mm/yyyy,这意味着我已经习惯了,使用 ISO-8601 始终是一个有意识的过程。对于大多数甚至没有尝试使用 ISO-8601 的人来说,情况更糟。如果你能尽可能地国际化,我认为这是一个很大的优势。

如何给出格式(mm/dd/yyyy 或 dd/mm/yyyy),然后打印用户所在文化中的今天日期。MSDN 有一篇文章介绍 根据该人的文化格式化日期时间, ,使用 CultureInfo 对象可能有助于执行此操作。格式(大多数人都熟悉)与以该格式表示的当前日期的组合应该足以为人们提供如何输入日期的线索。(还包括一个日历控件,供那些仍然无法弄清楚的人使用)。

简短的形式很方便,有助于避免拼写错误。根据需要进行本地化,但一定要显示预期的格式(不要让用户盲目)。提供日期选择器控件作为 选修的 协助填写该字段。

另外,即时解析和以长格式显示日期也可能有所帮助。

最佳选择: :我建议使用标准日期选择器。

选择: :每次编辑控件的内容发生变化时,解析它并显示(在单独的控件中?)日期的长格式(即:输入“03/04/09”显示“您的输入:2009 年 3 月 4 日”)

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top