2009-05-19 5 views
3

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

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

ответ

5

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

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

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

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

2

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

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

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

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

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

DateTime.Now.ToString(System.Globalization.CultureInfo.GetCultureInfo("en-US")); 
3

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

C#

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

VB

date.ToString("dd\/MM\/yyyy") 
+0

Это хорошо для всех знать.Программисты часто используют «/», когда они намереваются использовать функциональность «\ /» (в основном, чтобы заставить формат использовать «/», а не что-то еще.) –

1

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

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

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

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

Смежные вопросы