.NET конвертирует Datetime в формат Сортируемый шаблон даты / времени ("s"); - PullRequest
3 голосов
/ 13 августа 2010

Я работаю с VS2008, .NET и C #, и мне нужно отправить одному из наших клиентов переменную DATETIME.

Проблема в том, что им нужна дата в формате сортируемого шаблона даты / времени ("s").

Когда я получаю фактическое значение datetime, это объект 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.")

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

Thx

Ответы [ 3 ]

10 голосов
/ 13 августа 2010

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

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

Это можно немного сократить:

5 голосов
/ 13 августа 2010

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

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

1 голос
/ 13 августа 2010

Каждый раз, когда вы используете значение 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"));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...