Как вы устанавливаете глобальный формат даты в ASP.NET?

Как вы глобально задаете формат даты в ASP.NET?

На моем локальном компьютере и серверах есть региональные настройки, установленные на "English (Новая Зеландия)".

Когда я форматирую дату с помощью dd/MM/yyyy, я ожидаю увидеть 19/11/2008 на сегодняшний день, например.

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

Совсем недавно, по какой-то загадочной причине, наши локальные машины немного изменились. Несмотря на то, что все еще настроен на "английский (Новая Зеландия)", разделитель дат изменился с / на -! Такое же изменение не произошло на серверах, которые по-прежнему показывают "Английский (Новая Зеландия)" и / для деминера даты.

Итак, теперь для моей локальной машины для формата dd/MM/yyyy я получаю 19-11-2008 вместо 19/11/2008.

Это немного обескураживает.

Единственный путь, который я могу увидеть до сих пор, - это избежать косой черты и установить формат dd\/MM\/yyyy. Кажется, что это работает, но это не идеальное решение.

Кто-нибудь может помочь?

ПРИМЕЧАНИЕ. Это приложение для интрасети, и меня не волнует истинная глобализация. Я просто хочу исправить формат даты и не изменять его.

Ответ 1

Вы можете изменить текущую культуру потока в файле Global.asax и переопределить формат даты, например:

using System.Globalization;
using System.Threading;

//...
protected void Application_BeginRequest(Object sender, EventArgs e)
{    
  CultureInfo newCulture = (CultureInfo) System.Threading.Thread.CurrentThread.CurrentCulture.Clone();
  newCulture.DateTimeFormat.ShortDatePattern = "dd-MMM-yyyy";
  newCulture.DateTimeFormat.DateSeparator = "-";
  Thread.CurrentThread.CurrentCulture = newCulture;
}

Ответ 3

Хорошим способом является настройка Web.Config, формат даты отображается во всех компонентах aspx

<system.web>    
<globalization uiCulture="en" culture="en-NZ" />
</system.web>

Ответ 4

Вы можете настроить свою культуру без манипуляций:


using System.Globalization;
using System.Threading;

//... protected void Application_BeginRequest(Object sender, EventArgs e) {
Thread.CurrentThread.CurrentCulture = Thread.CurrentThread.CurrentUICulture = new CultureInfo("en-NZ"); }

Ответ 5

Для форматированных строк символ формата/фактически не разрешает литерал "/", как и следовало ожидать. Вместо этого он разрешает текущий разделитель времени даты, как он настроен в ваших региональных настройках. Попробуйте изменить свойство DateTimeFormatInfo.DateSeparator.

Для получения дополнительной информации см. http://msdn.microsoft.com/en-us/library/8kb3ddd4.aspx

Ответ 6

Это старый пост, но я подумал, что было бы полезно упомянуть его здесь, моя проблема была чем-то вроде того, что задал ОП, но решение заключалось в том, что культура была изменена в IIS, а не с панели управления.

IIS имеет собственный выбор культуры, который по умолчанию будет следовать культуре локального компьютера. Но по какой-то причине он был изменен на другую культуру, и я начал получать эти странные форматы даты.

Вы можете найти дополнительные ответы здесь.