Этот пользовательский формат DateTime нарушается в других культурах? - PullRequest
0 голосов
/ 09 февраля 2009

При отображении значений DateTime я хочу, чтобы они были отформатированы следующим образом: «9 февраля 2009 г., 7:00»

Я использую следующий код, но обеспокоен тем, что дата может отображаться неправильно в других культурах. Может кто-нибудь сказать мне, если это так или нет, и если это так, как я могу это исправить?

Date.ToString("MMMM dd, yyyy hh:mm tt");

Спасибо!

Ответы [ 4 ]

4 голосов
/ 09 февраля 2009

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

Что именно является «правильным»? Вы нормальное клиентское приложение? Если это так, вы получите локализованные названия месяцев. Это "неправильно"? Зависит от того, что вы ищете.

Если вы действительно хотите, чтобы в приложении на стороне клиента было благоприятное для локали время, то использование длинного формата даты по умолчанию даст вам самые плавные результаты. В моем регионе я не хотел бы видеть 12-часовые часы или месяц перед днем, хотя я бы, конечно, понял это.

Если вы являетесь приложением на стороне сервера, вам не нужно ничего локализовать по умолчанию, потому что языковой стандарт будет не вашим, а вашим сервером, и у вас будет странная проблема с переносимостью. В этом случае вам придется либо разрешить пользователю выбирать свою локаль, либо использовать собственные функции форматирования даты со встроенными английскими названиями месяцев.

(Или, чтобы избежать проблемы, не указывайте названия месяцев. В этом случае по умолчанию будет выбран формат ISO-8601 «ГГГГ-мм-дд ЧЧ: ММ: СС».)

2 голосов
/ 06 марта 2009

Я предпочитаю формат ISO 8601 (и да без «T»): вам не нужно жонглировать между различными представлениями в зависимости от того, кто читает ваши данные. Меньше кода, меньше ошибок.

Я продолжаю находить документы, первоначально написанные на английском языке, которые переводятся как "перевод", но с датами, которые остаются "как есть" и поэтому становятся совершенно неправильными.

В качестве дополнительного бонуса даты в формате ISO сортируются как обычные строки!

1 голос
/ 09 февраля 2009

код

        DateTime now=DateTime.Now;
        foreach(CultureInfo inf in CultureInfo.GetCultures( CultureTypes.InstalledWin32Cultures))
        {
            Console.WriteLine(now.ToString("MMMM dd, yyyy hh:mm tt", inf.DateTimeFormat));
        }

возврат
Tlhakole 09, 2009 04:21
guovvamanu 09, 2009 04:21
гоевтен 09, 2009 04:21
Веляка 09, 2009 04:21
Куовамаану 09, 2009 04:21
Хатун Пьюки 09, 2009 04:21 утра.
guovvamanu 09, 2009 04:21
таилвманну 09, 2009 04:21
Chwefror 09, 2009 04:21 утра.
9 февраля 2009 г. 04:21
guovvamano 09, 2009 04:21
Хуэй-тангуру 09, 2009 04:21 утра.
Хатун Пьюки 09, 2009 04:21
9 февраля 2009 г. 04:21

Я имею в виду, это показано для каждой культуры в его коде

1 голос
/ 09 февраля 2009

Почему бы просто не использовать длинный формат даты / времени пользователя?

...