Конвертировать из часового пояса в короткое время C#

У меня есть данные даты и времени, которые выглядят так: 2018-06-29T22:10:33Z,

Мне нужно в коротком формате даты - 06/29/2018 т.е. без временной части.

Я пробовал следующее в C#:

ConvertToDateTime(dateString);
DateTime.Parse(dateString);

Ошибки с обоими.

Я прибегаю к dateString.substring(0,10) чтобы получить первые 10 символов и преобразовать их в дату.

Есть ли лучший метод?

2 ответа

Решение

Вы можете использовать метод DateTime.TryParse. то есть:

string s = "2018-06-29T22:10:33Z";
DateTime t;
if (DateTime.TryParse(s, out t))
{
    Console.WriteLine(t.ToShortDateString());
}

Чтобы получить дату UTC:

string s = "2018-06-29T22:10:33Z";

DateTime t;
if (DateTime.TryParse(s, out t))
{
    Console.WriteLine(t.ToUniversalTime().ToShortDateString());
}

Прежде всего, формат даты выглядит не очень хорошо отформатированным. Формат, который вы должны получить, должен выглядеть так: "гггг-мм-ддтчч: мм: сс.ффффффк" (то есть "2018-06-29T22:10:05.1440844Z").

Предполагая, что в предоставленной выборке была опечатка, вот несколько примеров для преобразования строки даты и времени (в формате UTC) в DateTime:

var dateString = "2018-06-29T22:10:05.1440844Z";

var datetime = DateTime.ParseExact(dateString, "yyyy-MM-ddTHH:mm:ss.fffffffK", CultureInfo.InvariantCulture);
var date = datetime.Date;

или же

var datetime = DateTime.ParseExact(dateString, "o", CultureInfo.InvariantCulture);
var date = datetime.Date;

Вы должны принять во внимание, что вы получаете дату в формате UTC, а также должны учитываться преобразования часовых поясов. Кроме того, когда принимается только часть даты, часть времени устанавливается на "12:00:00 AM".

Другие вопросы по тегам