本地化日期格式描述符的最佳方法是什么?
任何来自不使用 mm/dd/yyyy 格式的文化的人都知道,必须以这种格式输入日期很烦人。.NET 框架提供了一些非常好的本地化支持,因此根据用户文化解析日期很简单,但您通常还希望显示有关所需格式的有用提示(特别是区分 yy 和 yyyy 可在大多数文化)。
以对大多数用户有意义的方式执行此操作的最佳方法是什么(例如,dd/M/yyy 令人困惑,因为大小写的变化以及一个和两个字母之间的切换)。
本地化日期格式描述符的最佳方法是什么?
任何来自不使用 mm/dd/yyyy 格式的文化的人都知道,必须以这种格式输入日期很烦人。.NET 框架提供了一些非常好的本地化支持,因此根据用户文化解析日期很简单,但您通常还希望显示有关所需格式的有用提示(特别是区分 yy 和 yyyy 可在大多数文化)。
以对大多数用户有意义的方式执行此操作的最佳方法是什么(例如,dd/M/yyy 令人困惑,因为大小写的变化以及一个和两个字母之间的切换)。
只需使用 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
我必须同意我的 DD/MM/YYYY 成长过程中 OP 的“错误”日期真的很糟糕,而且我发现 ISO 8601 日期和时间非常容易使用。一旦标准正确,engtech就有了不需要本地化的明显答案。
我打算将堆栈溢出的生日输入表单报告为一个错误,因为它对世界上的大多数人来说是多么痛苦。
这是我目前的方法。有什么建议么?
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");
国际标准的问题在于几乎没有人使用它们。我尽可能地尝试,但我被迫在现实生活中几乎所有地方都使用 dd/mm/yyyy,这意味着我已经习惯了使用 ISO-8601 始终是一个有意识的过程。对于大多数甚至不尝试使用 ISO-8601 的人来说,情况更糟。如果你能在可能的地方实现国际化,我认为这是一个很大的优势。
如何给出格式(mm/dd/yyyy 或 dd/mm/yyyy),然后打印用户文化中今天的日期。MSDN 有一篇关于为个人的文化格式化 DateTime的文章,使用 CultureInfo 对象可能有助于执行此操作。格式(大多数人都熟悉)与以该格式表示的当前日期相结合,应该足以让人们知道他们应该如何输入日期。(还包括一个日历控件,供那些仍然无法弄清楚的人使用)。
简短的表格很方便,有助于避免拼写错误。根据需要进行本地化,但一定要显示预期的格式(不要让用户盲目)。提供日期选择器控件作为填写字段的可选助手。
作为额外的,即时解析和长格式日期显示也可能有所帮助。
最佳选择:我建议使用标准日期选择器。
替代方法:每次编辑控件的内容更改时,对其进行解析并显示(在单独的控件中?)日期的长格式(即:输入“03/04/09”显示“您的输入:2009 年 3 月 4 日” )