Конвертировать из часового пояса в короткое время 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".