2014-01-24 2 views
0

Мой старый код LINQ используется, чтобы иметь что-то вроде этого:Изменение формата параметров string.Format во время выполнения

DateOfBirth = string.Format("{0:MM/dd/yyyy}", myTable.DateOfBirth), 

Но теперь я хотел, чтобы иметь возможность форматировать то, как когда-либо пользователь изменяет свой шаблон даты с ОС Windows , поэтому я изменил его, чтобы быть, как это, и она работает:

string regionShortDate = CultureInfo.CurrentCulture.DateTimeFormat.ShortDatePattern; 
string temp = "{0:" + regionShortDate + "}"; 
DateOfBirth = string.Format(temp, myTable.DateOfBirth), 

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

+0

http://msdn.microsoft.com/en-us/library/az4se3k1%28v=vs.110%29.aspx –

ответ

1

Применение DateTime.ToShortDateString Метод

DateOfBirth = myTable.DateOfBirth.ToShortDateString(); 

Строка, возвращаемая методом ToShortDateString является культуры чувствительных. Он отражает шаблон, определенный текущим объектом DateTimeFormatInfo культуры . Например, для культуры en-US стандартная короткая модель даты - «M/d/yyyy»; для культуры de-DE это «dd.MM.yyyy»; для культуры ja-JP это «yyyy/M/d». Конкретная строка формата на конкретном компьютере также может быть настроена так, чтобы она отличалась от стандартного короткого формата даты .

И

Значения текущего объекта DateTime отформатирован с использованием шаблона, определенного DateTimeFormatInfo.ShortDatePattern собственностью , связанной с текущей культурой потока. Возвращаемое значение равно , идентичному значению, возвращаемому путем указания стандартной строки «d» Строка формата DateTime с использованием метода ToString (String).

+0

Хорошо, попробуем это сейчас, спасибо. Но вчера у меня были ситуации, которые мой код говорил как DateTime.Now.ToString («MM/dd/yyyy»), и вместо этого я хотел использовать этот «ToShortDateString», и в этом случае он не работал должным образом. Не знаете, почему tho –

+0

@DevWannaBe, 'ToShortDateString' вернет вам строку на основе настроек культуры клиентского компьютера. Это может быть 'MM/dd/yyyy' или' dd/MM/yyyy', и вот что вы пытаетесь сделать, используя свой код в вопросе – Habib

+0

О, хорошо, я прочитал ваше сообщение, которое объясняет это, см. Главу он использует «Культуру» так, как «en-US» или «en-CA» ... но это не то, что я хочу. В региональных настройках панели управления вы все равно можете сохранить их в США, но изменить шаблон короткой даты на yy/MM/dd, чтобы он не смотрел на это. –

1

Вы можете использовать ToShortDateString, как предлагает Хабиб.

Это зависит от CultureInfo.CurrentCulture, потому что в то время как CultureInfo содержит разнообразную информацию о вещах, которые обычно различаются в зависимости от языка и местности, но включают личные предпочтения. Следовательно, хотя для меня пока CurrentCulture.Name возвращает en-IE, DateTime.Now.ToShortDateString() возвращает 2014-01-24, а не 24/01/2014, как можно было бы получить, используя объект, возвращенный с CultureInfo.GetCultureInfo("en-IE"), потому что моя собственная установка настроена на использование en-IE для языка и ISO 8601 для дат и времени.

Поэтому не беспокойтесь о названии текущей культуры и текущей культуре пользовательского интерфейса, относящейся исключительно к ее языку; они могут иметь значение UseUserOverride, установленное в true и фактически построенное на основе настроек пользователя.

Как и предложение Хабиба, если вы хотите использовать текущую строку коротких дат (или что от любого другого CultureInfo вы можете использовать строку "d". Это не дает никаких преимуществ в вашем случае, когда короткая строка даты это все, что используется, но это полезно, если оно будет частью более крупной фразой:

string.Format("Today is {0:d}.", DateTime.Now) 

(на моей системе, Today is 2014-01-24. на твое, возможно, что-то еще).

Есть другие useful single-string formatting strings for dates, которые могут быть использованы аналогичным образом.

Edit:

Поскольку вы только что указали, что вы используете DateTime?, а не DateTime, то у Вас есть три варианта:

  1. Используйте DateOfBirth = string.Format("{0:d}", myTable.DateOfBirth). Это приводит к пустой строке для нулевых случаев.
  2. Тест на недействительность с string.Format, например. DateOfBirth = myTable.DateOfBirth.HasValue ? string.Format("Born on {0:d}.", myTable.DateOfBirth.Value) : "Date of birth unknown";
  3. Тест на недействительность с ToShortDateString; DateOfBirth = myTable.DateOfBirth.HasValue ? myTable.DateOfBirth.ToShortDateString() : "Date of birth unknown";.
+1

@DevWannaBe, причина, по которой вы не получаете исключения в случае, если она равна null из-за String.Format, см. Этот вопрос http://stackoverflow.com/questions/13276418/how-string-format-handles-null-values – Habib

+0

Спасибо Jon за подробную информацию. –

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