Переопределить разделитель даты по умолчанию в .net - PullRequest
4 голосов
/ 19 мая 2009

У меня есть веб-сервер, расположенный в Швейцарии, и он предназначен для обслуживания как американского региона, так и европейского региона. Когда из Северной и Южной Америки отображается дата, она отделяется точкой, а не косой чертой.

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

Ответы [ 4 ]

6 голосов
/ 19 мая 2009

Глобализация в ASP.NET должна сделать все для вас в значительной степени. См. эту статью MSDN , озаглавленную Как: установить культуру и культуру пользовательского интерфейса для глобализации веб-страниц ASP.NET . Это должно быть именно то, что вы хотите, поскольку вам просто нужно установить текущую (UI) культуру для текущего потока, когда пользователь входит в систему. Затем вы можете вызвать date.ToString(), и он вернет текстовое представление в правильном формате. 1006 *

Эквивалентно, вы могли бы сделать что-то вроде этого:

var culture = System.Globalization.CultureInfo.GetCultureInfo("en-GB");
var dateString = date.ToString(culture.DateTimeFormat);

Но на самом деле это просто делает то же самое вручную и гораздо менее элегантно. С таким же успехом вы можете использовать среду глобализации ASP.NET здесь.

3 голосов
/ 19 мая 2009

Если текущая культура использует период в качестве разделителя даты, то вы можете отобразить с косой чертой, используя

C #

date.ToString(@"dd\/MM\/yyyy");

VB

date.ToString("dd\/MM\/yyyy")
2 голосов
/ 19 мая 2009

Используйте строку формата с DateTime.ToString(), например:

 DateTime.Now.ToString("MM/dd/yyyy");

В этом случае символ / означает «использовать разделитель даты для текущей культуры». Более того, вы можете просто позвонить DateTime.Now.ToShortDateString(), чтобы использовать формат короткой даты локальной системы.

В пространстве имен System.Globalization имеется дополнительная помощь по локализации.

Теперь вот трюк: ваша «локальная» система - это ваш веб-сервер, и это означает, что она почти всегда будет использовать швейцарский формат. Таким образом, вы также хотите передать IFormatProvider, чтобы сообщить системе, какую культуру использовать. Это будет выглядеть примерно так:

DateTime.Now.ToString(System.Globalization.CultureInfo.GetCultureInfo("en-US"));
1 голос
/ 19 мая 2009

Мне не нужно было его использовать, но DateTime имеет встроенную информацию о культуре, которую вы можете использовать:

DateTime dt = DateTime.Now;
dt.ToString(System.Globalization.CultureInfo.GetCultureInfo("fr-CH"));

См. это на MSDN . Просто запишите культуру вашего пользователя ("fr-CH", "en-US" и т. Д.), И вы сможете сделать больше, чем просто США против Швейцарии.

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

...