2008-08-03 123 views
14

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

由於來自不使用MM/dd/yyyy格式知道一個人的文化,很是煩人有這種格式的輸入日期。 .NET框架提供了一些非常好的本地化支持,因此根據用戶的文化來解析日期是微不足道的,但是您通常也希望顯示有用的提示以瞭解所需的格式(特別是區分yy和yyyy,它們可以互換大多數文化)。

以對大多數用戶有意義的方式進行此操作的最佳方式是什麼(例如dd/M/yyy由於情況發生變化以及在一個和兩個字母之間切換而引起的混淆)。

回答

2

這是我目前的方法。有什麼建議麼?

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"); 
1

如何讓其次當今用戶的區域性日期的打印格式(MM/DD/YYYY或DD/MM/YYYY)。 MSDN有一篇關於formatting a DateTime for the person's culture的文章,使用CultureInfo對象,這可能對此很有幫助。格式(大多數人熟悉的格式)與以該格式表示的當前日期的組合應該足以提供關於如何輸入日期的人的線索。 (還包括那些仍然無法弄清楚的日曆控件)。

6

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 
1

國際標準的麻煩在於幾乎沒有人使用它們。我嘗試盡我所能,但在現實生活中我幾乎在任何地方都被迫使用dd/mm/yyyy,這意味着我很習慣它,它總是使用ISO-8601的有意識的過程。對於大多數甚至不嘗試使用ISO-8601的人來說,情況更糟。如果你能儘可能地國際化,我認爲這是一個很大的優勢。

4

我有同意的OP「錯誤」日期,真的與我的DD/MM/YYYY教養罐子,我發現ISO 8601的日期和時間非常易於使用。一旦標準正確,engtech有明顯的答案,不需要本地化。

我要報告堆棧溢出的生日輸入形式的一個錯誤,因爲它是世界上大多數的如何突兀的多。

1

短表格很方便,有助於避免拼寫錯誤。按照適用情況本地化,但一定要顯示預期的格式(不要讓用戶失明)。提供一個日期選擇器控件作爲可選助手填寫現場。

作爲一個額外的,在即時解析和日期顯示在長格式也會有所幫助。

0

最好的選擇:我反而推薦使用標準的日期選擇器。

替代方案:每次編輯控件的內容發生變化時,解析它並顯示(在單獨的控件中?)日期的長格式(例如:input「03/04/09」display「Your input :2009年3月4日「)