2013-06-19 8 views
1

Так что это кажется легким делом, но все же меня озадачивает. Я хочу отобразить список строк для моего пользователя, основываясь на датах создания нескольких файлов. Итак, в основном, отобразите список DateTimes. Проблема состоит в том, что вы хотите использовать пользовательский формат (что-то вроде 5/6/13 12:01 PM), но я хочу, чтобы он датировал часть этого, чтобы отображаться по-разному в зависимости от того, как вы показываете вашу систему с датой (т. Е. отобразите эту дату как 6/5/13).Создайте собственный формат DateTime, соответствующий местоположению в .NET C#

Я думал, что могу просто построить две строки (один для даты и один для времени) и убедиться, что они датированы в формате по региону, но нет опции по умолчанию для 5/6/13 (только 5/6/2013): http://msdn.microsoft.com/en-us/library/az4se3k1.aspx

Далее Я надеялся, что функция DateTime.ToShortDateString() будет работать, но она будет отображаться как 5/6/2013.

Я знаю, что могу использовать совершенно собственный формат: DateTime.ToString («M/d/yy h: mm tt»), но я не хочу фиксировать дату с месяцем до дня.

Я полагаю, что если я смогу «что-то понять», тогда я мог бы просто создать обычное время для Америки и для Европы, а затем запросить ОС для того, какое время они отображают. Но это кажется очень чрезмерным. Есть предположения?

+0

Вы можете явно разобрать короткий формат даты и создать свой собственный на основе порядка DMY там ... Но может быть лучше и определенно просто использовать существующий формат ... 5/6/2007 достаточно болезненно, чтобы понять, привык ли вы к другому заказу, я не вижу, что год добавляется к боли 5/6/7 совершенно правильная дата когда-то ... но какой из 27 трудно узнать :) –

+0

Не уверен, что вы получаете здесь. Думаю, вы только что повторили мой вопрос. Я хочу сделать это лучше и проще, поместив формат даты в DateTimeFormat моего пользователя. – user912447

ответ

0

System.Globalization.CultureInfo реализует IFormatProvider, поэтому вы можете указать объект CultureInfo как параметр метода ToString.

MSDN похоже an example именно то, что вы хотите.

+0

Если я ошибаюсь, я не вижу способа настроить это. Это просто напечатает общую дату в любой культуре, которую вы ей даете. Как и в случае, культура будет отображать аспект даты как «D/M/YYYY». Мне все еще нужно дать ему настраиваемый формат, чтобы получить «D/M/YY» – user912447

+0

Обновление: Да, я протестировал его, и если вы дадите ToString() настраиваемый строковый формат, тогда этот пользовательский строковый формат переопределит CultureInfo. – user912447

+0

Извините, вы абсолютно правы. Как временное решение (хотя оно кажется взломанным), как насчет принятия «ShortDatePattern» (http://msdn.microsoft.com/en-us/library/system.globalization.datetimeformatinfo.shortdatepattern.aspx) и замены yyyy на yy ? –

1

Вы можете получить текущий формат ShortDate из текущей культуры, изменить его и использовать его с ToString()

var currentDate = DateTime.Now; 
var shortDateFormat = CultureInfo.CurrentCulture.DateTimeFormat.ShortDatePattern; 
var newShortDateFormat = shortDateFormat.Replace("yyyy", "yy"); 
Console.WriteLine(currentDate.ToString(shortDateFormat)); 
Console.WriteLine(currentDate.ToString(newShortDateFormat)); 
+0

Это будет работать, если вы создали новую CultureInfo с измененным ShortDatePattern. Поэтому вместо передачи строки в ToString() вы должны передать CultureInfo с модифицированным ShortDatePatter. – user912447

+0

@ user912447 Это также способ реализовать это. – developer10214

+0

Не знаю, почему я думал, что сначала это не сработает. Я просто сделал это так, как я предложил, и это намного более грязно, чем должно быть. – user912447