2010-10-18 4 views

ответ

3

Вы должны использовать CultureInfo для управления форматом при использовании DateTime.ToString()

После того, как вы установили CurrentCulture на вашем Current Thread попробуйте следующее:

DateTimeFormatInfo format = Thread.CurrentThread.CurrentCulture.DateTimeFormat; 
string dateTime = DateTime.Now.ToString(format.FullDateTimePattern); 
+0

System.Threading.Thread.CurrentThread.CurrentCulture (и .CurrentUICulture). –

+0

Культура устанавливается, но формат dateTime не изменяется. Проверьте править выше – Mulki

+0

@Mulki - Я отредактировал свой ответ. Спасибо – codingbadger

1

Вы можете использовать методы расширения расширять datetime и создавать TOISOString().

проверить http://msdn.microsoft.com/en-us/library/bb383977.aspx о способах его достижения. В методе расширения вы можете использовать параметры для форматирования строки так, как вам нужно, тогда вы можете использовать DateTime.ToISOString(); Вы также можете использовать культуинфо, как сказал Барри, но я не знаю, соответствует ли оно вашим потребностям.

+0

Расширение с другим именем не поможет ... Мне нужно, чтобы это было сделано в dateTime.ToString ... Это так, что когда datatable анализируется на текст/Json/Xml. Я хочу, чтобы формат был выведен в вышеупомянутом формате. – Mulki

2

Необходимо обновить свойство System.Threading.Thread.CurrentThread.CurrentCulture.

Это влияет на все DateTime.ToString() в текущей теме.

+0

Im, устанавливающий как текущую культуру, так и еду в соответствии с тем, который указан в правлении ... Культура устанавливается вместе с форматом даты .. но dateTimeObj.ToString() продолжает показывать его в формате en-us ... это что-то иначе нужно было сделать иначе, чем просто установить культуру? – Mulki

2

С помощью ответов Альбина и Барри iv получил следующий код, чтобы установить формат времени по центру в Global.asax.

using System.Globalization; 
using System.Threading; 

protected void Application_BeginRequest() 
     { 
      CultureInfo standardizedCulture = (CultureInfo)CultureInfo.CurrentCulture.Clone(); 
      standardizedCulture.DateTimeFormat.DateSeparator = "-"; 
      standardizedCulture.DateTimeFormat.LongDatePattern = "yyyy-MM-dd hh:mm:ss"; 
      standardizedCulture.DateTimeFormat.FullDateTimePattern = "yyyy-MM-dd hh:mm:ss";   
      standardizedCulture.DateTimeFormat.ShortDatePattern = "yyyy-MM-dd"; 
      Thread.CurrentThread.CurrentCulture = standardizedCulture; 
      Thread.CurrentThread.CurrentUICulture = standardizedCulture; 
     } 
+0

Я считаю, что LongDatePattern = "s"; или "o"; также будет выполнять эту работу. –

+0

Идеи, полученные из 1) http://www.hanselman.com/blog/EnablingEvilOverridingSystemDateTimesDefaultToString.aspx 2) http://channel9.msdn.com/forums/TechOff/125490-ISO-8601-date-formats-in- ASPNET/ – Mulki

0

Я думаю, что запрашиваемый формат т.е. DateTIme.Now.ToString() будет иметь очень плохое влияние на ваш читаемость кода (и ремонтопригодность ..). Попытка переопределить хорошо известное поведение с пользовательским - это плохая практика.
Что я сделать считать хорошим способом использовать это так: DateTIme.Now.ToString(IsDefaultFormat).
Теперь все, что вам нужно сделать, это добавить метод расширения для DateTime который принимает bool, и если это Ьоо установлено значение истинно, возвращает DateTime с помощью «формат по умолчанию»

+0

Это для веб-службы, которую я разрабатываю. Мне нужно, чтобы формат по умолчанию был переопределен, чтобы быть уверенным, что я не отправлял его в каком-либо формате, а в единый стандартный однозначный формат. Кроме того, язык по умолчанию устанавливает формат даты в США, который очень запутан для меня, так как en-GB следует здесь всей командой разработчиков. – Mulki

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