代码之家  ›  专栏  ›  技术社区  ›  ICR

本地化日期格式描述符

  •  16
  • ICR  · 技术社区  · 16 年前

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

    由于不使用mm/dd/yyyy格式的区域性中的任何人都知道,以这种格式输入日期是很烦人的。.NET框架提供了一些非常好的本地化支持,因此根据用户的区域性分析日期是很简单的,但是您通常还希望显示一个关于所需格式的有用提示(尤其是区分YY和YYYY,在大多数区域性中这两种格式是可互换的)。

    对于大多数用户来说,最好的方法是什么(例如,dd/m/yyy由于大小写的变化以及一个字母和两个字母之间的切换而令人困惑)。

    7 回复  |  直到 8 年前
        1
  •  6
  •   HopelessN00b engtech    10 年前

    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
    
        2
  •  4
  •   Community    7 年前

    我必须同意“错误的”日期与我的DD/MM/YYYY教育,我发现ISO 8601日期和时间非常容易工作。一旦标准正确,并且 engtech 答案很明显,不需要本地化。

    我打算将StackOverflow上的生日输入表单作为一个bug进行报告,因为这对大多数人来说是一个非常痛苦的经历。

        3
  •  2
  •   ICR    16 年前

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

    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");
    
        4
  •  2
  •   ICR    16 年前

    国际标准的问题在于几乎没有人使用它们。我尽我所能,但我不得不在现实生活中的任何地方使用dd/mm/yyyy,这意味着我太习惯了,使用i so-8601总是一个有意识的过程。对于大多数不使用ISO-8601的人来说,情况更糟。如果你能尽可能地国际化,我认为这是一个很大的优势。

        5
  •  1
  •   Yaakov Ellis NevilleDNZ    16 年前

    请给出格式(mm/dd/yyyy或dd/mm/yyyy),然后在用户区域性中打印出今天的日期。msdn有一篇关于 formatting a DateTime for the person's culture ,使用可能有助于执行此操作的CultureInfo对象。格式(大多数人都熟悉)与该格式中表示的当前日期的组合应该足以为该人提供有关如何输入日期的线索。(还包括一个日历控件,用于那些仍然无法理解的人)。

        6
  •  1
  •   McDowell    16 年前

    简短的表格很方便,有助于避免拼写错误。本地化(如果适用),但一定要显示预期的格式(不要让用户看不见)。提供日期选取器控件作为 可选择的 协助填表。

    另外,动态解析和长格式显示日期也会有所帮助。

        7
  •  0
  •   user19050    16 年前

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

    替代方案 :每次编辑控件的内容更改时,分析并显示(在单独的控件中?)日期的长格式(即:输入“03/04/09”显示“您的输入:2009年3月4日”)。