Локализация дескрипторов формата даты

Каков наилучший способ локализации дескриптора формата даты?

Как известно, кто-либо из культуры, которая не использует формат mm/dd/yyyy, раздражает необходимость вводить даты в этом формате..NET framework обеспечивает очень хорошую поддержку локализации, поэтому тривиально анализировать даты в соответствии с культурой пользователей, но вы также часто хотите отобразить полезный намек относительно требуемого формата (особенно для различения yy и yyyy, который является взаимозаменяемым в большинство культур).

Каков наилучший способ сделать это таким образом, который имеет смысл для большинства пользователей (например, dd/M/yyy запутан из-за изменения в случае и переключения между одной и двумя буквами).

Ответ 1

Вот мой текущий метод. Любые предложения?

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

Ответ 2

Просто используйте 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

Ответ 3

Я должен согласиться с "неправильными" датами OP на самом деле с моим воссозданием DD/MM/YYYY, и я считаю, что даты и время ISO 8601 чрезвычайно просты в работе. На этот раз стандарт получил это правильно, и engtech имеет очевидный ответ, который не требует локализации.

Я собирался сообщать о форме ввода дня при переполнении стека в качестве ошибки из-за того, насколько больной большой палец он принадлежит большей части мира.

Ответ 4

Как насчет предоставления формата (mm/dd/yyyy или dd/mm/yyyy), за которым следует распечатка сегодняшней даты в пользовательской культуре. В MSDN есть статья о форматировании DateTime для культуры человека, используя объект CultureInfo, который может быть полезен при этом. Сочетание формата (которое большинство людей знакомо) в сочетании с текущей датой, представленной в этом формате, должно быть достаточным ключом к человеку о том, как они должны ввести дату. (Также включите календарный контроль для тех, кто все еще не может понять это).

Ответ 5

Проблема с международными стандартами заключается в том, что их почти никто не использует. Я стараюсь, где могу, но я вынужден использовать dd/mm/yyyy почти всюду в реальной жизни, а это значит, что я так привык к этому, что это всегда сознательный процесс использования ISO-8601. Для большинства людей, которые даже не пытаются использовать ISO-8601, это еще хуже. Если вы можете интернационализировать, где можете, я считаю это большим преимуществом.

Ответ 6

Краткая форма удобна и помогает избежать орфографических ошибок. Локализовать, если применимо, но обязательно отобразить ожидаемый формат (не оставляйте пользователя слепым). Предоставьте управление выбора даты в качестве дополнительного помощника для заполнения поля.

В дополнение к этому может помочь и синтаксический анализ на лету и отображение даты в длинной форме.

Ответ 7

Лучший вариант. Вместо этого я рекомендовал бы использовать стандартный выбор даты.

Альтернатива: каждый раз, когда изменяется содержимое элемента управления редактированием, анализируется и отображается (в отдельном элементе управления?) длинный формат даты (то есть: ввод "03/04/09", дисплей "Ваш вход: 4 марта 2009 г." )