本地化日期格式描述符的最佳方式是什么?本地化日期格式描述符
由于来自不使用MM/dd/yyyy格式知道一个人的文化,很是烦人有这种格式的输入日期。 .NET框架提供了一些非常好的本地化支持,因此根据用户的文化来解析日期是微不足道的,但是您通常也希望显示有用的提示以了解所需的格式(特别是区分yy和yyyy,它们可以互换大多数文化)。
以对大多数用户有意义的方式进行此操作的最佳方式是什么(例如dd/M/yyy由于情况发生变化以及在一个和两个字母之间切换而引起的混淆)。
本地化日期格式描述符的最佳方式是什么?本地化日期格式描述符
由于来自不使用MM/dd/yyyy格式知道一个人的文化,很是烦人有这种格式的输入日期。 .NET框架提供了一些非常好的本地化支持,因此根据用户的文化来解析日期是微不足道的,但是您通常也希望显示有用的提示以了解所需的格式(特别是区分yy和yyyy,它们可以互换大多数文化)。
以对大多数用户有意义的方式进行此操作的最佳方式是什么(例如dd/M/yyy由于情况发生变化以及在一个和两个字母之间切换而引起的混淆)。
这是我目前的方法。有什么建议么?
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");
如何让其次当今用户的区域性日期的打印格式(MM/DD/YYYY或DD/MM/YYYY)。 MSDN有一篇关于formatting a DateTime for the person's culture的文章,使用CultureInfo对象,这可能对此很有帮助。格式(大多数人熟悉的格式)与以该格式表示的当前日期的组合应该足以提供关于如何输入日期的人的线索。 (还包括那些仍然无法弄清楚的日历控件)。
Just use 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,这意味着我很习惯它,它总是使用ISO-8601的有意识的过程。对于大多数甚至不尝试使用ISO-8601的人来说,情况更糟。如果你能尽可能地国际化,我认为这是一个很大的优势。
我有同意的OP“错误”日期,真的与我的DD/MM/YYYY教养罐子,我发现ISO 8601的日期和时间非常易于使用。一旦标准正确,engtech有明显的答案,不需要本地化。
我要报告堆栈溢出的生日输入形式的一个错误,因为它是世界上大多数的如何突兀的多。
短表格很方便,有助于避免拼写错误。按照适用情况本地化,但一定要显示预期的格式(不要让用户失明)。提供一个日期选择器控件作为可选助手填写现场。
作为一个额外的,在即时解析和日期显示在长格式也会有所帮助。
最好的选择:我反而推荐使用标准的日期选择器。
替代方案:每次编辑控件的内容发生变化时,解析它并显示(在单独的控件中?)日期的长格式(例如:input“03/04/09”display“Your input :2009年3月4日“)