2010-08-13 1 views
3

Im работает с VS2008, .NET и C#, и мне нужно отправить одному из наших клиентов переменную DATETIME..NET convert Datetime для форматирования Сортируемый шаблон даты/времени ("s");

Проблема в том, что они хотят иметь дату в формате Сортировка даты/времени («s»).

Когда я получаю фактическое время и дата, это объект Datetime. Когда я отформатирую его до данного формата, теперь это объект String, и он имеет формат, который я хочу. Но после этого я не могу создать объект Datetime из этой форматированной строки в том же формате, потому что он всегда возвращает его в исходный формат Datetime.

Более конкретно:

DateTime currTime = System.DateTime.Now; //(the format is "13/08/2010 09:33:57 a.m.") 

String date = String.Format("{0:s}", currTime);// (wanted format "2010-08-13T09:33:57") 

DateTime newDate = DateTime.Parse(date);// (original format again "13/08/2010 09:33:57 a.m.") 

IFormatProvider culture = new System.Globalization.CultureInfo("", true); //(Invariant Culture) 
String format = "s";       
DateTime fecha = DateTime.ParseExact(date, format, culture); // (original format again "13/08/2010 09:33:57 a.m.") 

Есть ли способ получить объект Datetime с желаемым форматом, или объекты, дата и времени использовать данный формат, и вы не можете форматировать их эквивалентные форматы строк?

Thx

ответ

4

Если я правильно понял вопрос, я думаю, вы сбиты с толку. A DateTime Объект сам по себе не является допустимым, очень важно только числовое значение (количество тиков с DateTime.MinValue или что бы то ни было).

Вы можете преобразовать DateTime объект в stringпредставления в в любом формате, вам нравится, но вы не изменяя фактический DateTime объект.

+0

Будет ли downvoter так любезно объяснить, что не так с этим ответом? – fearofawhackplanet

+0

Я понятия не имею, возьмите +1 от меня, чтобы противодействовать этому. – Rob

9

DateTime просто номер. Он не имеет собственного «формата». Он преобразуется только в формат при преобразовании в строку. Таким образом, всякий раз, когда вам нужно DateTime в строке, вы должны указать, какой формат вы хотите его в

String date = String.Format("{0:s}", currTime); 

Это может быть коротким замыканием, чтобы немного:.

String date = currTime.ToString("s"); 
+2

Хммм .. Я набрал 'DataTime' * дважды * ?? Посмотрите, что произойдет, когда у меня нет Intellisense ... –

+0

После выполнения следующего синтаксиса Строка date = currTime.ToString ("s"); Выход будет 2014-01-29T11: 25: 29 Теперь вы можете сохранить этот формат даты в переменной, имеющей тип DateTime? –

1

Каждый раз, когда вы используете DateTime значение в месте, где его необходимо преобразовать в строку (например, в string.Format()), C# обычно вызывает метод .ToString(). Тип DateTime объявляет метод .ToString(), который имеет формат, который вы не хотите.

Однако DateTime - это дополнительные методы, включая .ToString(IFormatProvider provider) и .ToString(string format).

Таким образом, вы, вероятно, можете достичь того, чего вы хотите, если вы замените все использование DateTime переменных в соответствующем струноподобном контексте тот, которая вызывает соответствующую .ToString перегрузки, например:

Вместо

var message = string.Format("The parcel was sent on {0}.", currTime); 

использование

var message = string.Format("The parcel was sent on {0}.", currTime.ToString("s"));