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

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

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

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

3.08.2008 17:30:20
7 ОТВЕТОВ

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

Я должен согласиться с тем, что «неправильные» даты ОП действительно противоречат моему воспитанию ДД / ММ / ГГГГ, и я считаю, что с датами и временем ISO 8601 работать очень просто. На этот раз стандарт понял все правильно, и у engtech есть очевидный ответ, который не требует локализации.

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

4
23.05.2017 11:33:14
РЕШЕНИЕ

Вот мой текущий метод. Какие-либо предложения?

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
3.08.2008 17:31:31

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

2
4.08.2008 08:14:56

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

1
3.08.2008 17:37:43

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

Кроме того, может помочь анализ на лету и отображение даты в длинном виде.

1
4.08.2008 19:13:17

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

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

0
19.09.2008 17:02:14