本地化日期格式描述符
本地化日期格式描述符的最佳方法是什么?
正如不使用mm / dd / yyyy格式的文化人士所知道的那样,以这种格式输入日期很烦人。 .NET框架提供了一些非常好的本地化支持,因此根据用户的文化来解析日期很简单,但是我们通常还希望显示有关所需格式的有用提示(尤其是在yy和yyyy之间进行区分,它们在Windows中是可互换的)。大多数文化)。
以对大多数用户有意义的方式执行此操作的最佳方法是什么(例如,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上有一篇有关使用CultureInfo对象格式化该人的文化的DateTime的文章,这可能对此有所帮助。格式(大多数人都熟悉的格式)与以该格式表示的当前日期的组合应该足以使人们了解如何输入日期。 (还为那些仍然无法弄清楚日历的人提供了一个日历控件)。
只需使用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的人来说,情况甚至更糟。如果我们可以在可能的地方进行国际化,我认为这是一个很大的优势。
我必须同意我的DD / MM / YYYY成长过程中OP的"错误"日期确实存在,我发现ISO 8601日期和时间非常易于使用。一旦标准制定正确,并且engtech有了显而易见的答案,不需要本地化。
我打算将堆栈溢出时的生日输入表单报告为一个错误,因为它对全世界的大多数人来说是一个痛苦的拇指。
简短形式很方便,有助于避免拼写错误。进行本地化(如果适用),但请确保显示期望的格式(不要使用户盲目)。提供日期选择器控件作为填写该字段的可选助手。
另外,即时分析和以长格式显示日期也可能会有所帮助。
最佳选择:我建议使用标准的日期选择器。
替代方法:每次更改编辑控件的内容时,都将对其进行解析并显示(在单独的控件中?)日期的长格式(即:输入" 03/04/09"显示"输入:2009年3月4日") )