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

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

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

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


person ICR    schedule 03.08.2008    source источник


Ответы (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
person engtech    schedule 03.08.2008

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

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

person sparkes    schedule 04.08.2008

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

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");
person ICR    schedule 03.08.2008

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

person ICR    schedule 04.08.2008

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

person Yaakov Ellis    schedule 03.08.2008

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

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

person McDowell    schedule 04.08.2008

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

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

person user19050    schedule 19.09.2008