Преобразование DateTime в определенный формат

Каков наилучший и самый быстрый способ преобразовать DateTime в этот формат?

2015-03-26T18:02:58.145798Z

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

26/03/2015 18:02:58

Для преобразования даты я использую эту строку кода:

var parsedDate = DateTime.Parse("2015-03-26T18:02:58.145798Z", CultureInfo.InvariantCulture, DateTimeStyles.RoundtripKind);

Каков наилучший способ преобразовать parsedDate обратно в исходный формат?

EDIT: я хочу преобразовать DateTime в этот формат 2015-03-26T18:02:58.145798Z как строку


person frenk91    schedule 23.04.2015    source источник
comment
Чего ты хочешь? Вы хотите преобразовать его обратно в String?   -  person Praveen Paulose    schedule 23.04.2015
comment
ToString(O) почти выполняет свою работу, но проблема в том, что в конце строки отсутствует буква Z, есть идеи?   -  person frenk91    schedule 23.04.2015
comment
Z не отсутствует, какая у вас версия фреймворка?   -  person Jaycee    schedule 23.04.2015
comment
Я пишу универсальное приложение для Windows Phone 8.1 и Windows 8.1 под Windows Runtime.   -  person frenk91    schedule 23.04.2015
comment
@frenk91 используйте parsedDate.ToUniversalTime().   -  person Default    schedule 23.04.2015
comment
@ По умолчанию это работает! Спасибо!   -  person frenk91    schedule 23.04.2015
comment
не добавляйте окончательный код в свой вопрос. Если вы чувствуете, что ответы недостаточно объясняют это, добавьте свой собственный ответ с окончательным кодом. Отделите вопрос от ответа.   -  person Default    schedule 23.04.2015
comment
Я откатил вашу версию, так как код, который вы добавили, уже объяснен в добавленных ответах.   -  person Default    schedule 23.04.2015


Ответы (3)


Если у вас есть объект DateTime, вы можете преобразовать его в строку с этим конкретным форматом, используя O в качестве спецификатора формата:

parsedDate.ToString("O")

or

parsedDate.ToUniversalTime().ToString("O") // if parsedDate is not UTC

возвращает "2015-03-26T18:02:58.1457980Z".


Если DateTimeKind вашего объекта DateTime не равно Utc, вы не получите расширение Z в конце строки в соответствии с ISO8601. В приведенном вами примере присутствует Z, потому что DateTime.Parse распознает его и вернет DateTime в Utc. Если Z отсутствует в исходной строке, которую вы анализируете, вы все равно можете предположить, что это UTC, используя ToUniversalTime() в объекте даты и времени.

person Dirk    schedule 23.04.2015
comment
uotput с использованием ToString(O) это 2015-04-23T08:03:39.0000000 он пропускает Z в конце - person frenk91; 23.04.2015
comment
@Default @frenk91 Потому что вы используете DateTime.Now, у которого есть DateTimeKind.Local. Проанализированный DateTime в примере имеет DateTimeKind.Utc, и в этом случае в конце будет Z. - person Dirk; 23.04.2015
comment
@Dirk вам нужно исправить parsedDate.UtcNow, это не сработает. Добавьте DateTime.UtcNow в качестве альтернативы и объясните, почему Z находится только в конце для UTC. - person Jaycee; 23.04.2015
comment
@Jaycee нет parsedDate.UtcNow, если он проанализирует строку так, как он говорит, он получит время в формате UTC. - person Dirk; 23.04.2015
comment
@Dirk Я имею в виду, что вы используете исходную переменную DateTime и вызываете для нее UtcNow, это статическое свойство! - person Jaycee; 23.04.2015
comment
@Default исправил это сейчас. Я проверил наличие метода, но не заметил, что он статичен. Виноват! - person pyrocumulus; 23.04.2015

Ответ почти такой же, как сказал @Dirk:

parsedDate.ToString("O") - это строка, но вам нужно преобразовать DateTime в UTC: так вы получите "Z" в конце.

См. https://msdn.microsoft.com/en-us/library/az4se3k1%28v=vs.110%29.aspx для получения дополнительной информации.

Изменить:

Чтобы преобразовать DateTime в UTC, используйте метод ToUniversalTime().

person Tamás Deme    schedule 23.04.2015

САМЫЙ БЫСТРЫЙ способ, известный мне, это:

        ///<summary>Format the date time value as a parsable ISO format: "2008-01-11T16:07:12Z".</summary>
    public static string ISO( this DateTime dt ) {
        var ca = new char[] {
            (char) ( dt.Year / 1000 % 10 + '0' ),
            (char) ( dt.Year / 100 % 10 + '0' ),
            (char) ( dt.Year / 10 % 10 + '0' ),
            (char) ( dt.Year % 10 + '0' ),
            '-',
            (char) ( dt.Month / 10 + '0' ),
            (char) ( dt.Month % 10 + '0' ),
            '-',
            (char) ( dt.Day / 10 + '0' ),
            (char) ( dt.Day % 10 + '0' ),
            'T',
            (char) ( dt.Hour / 10 + '0' ),
            (char) ( dt.Hour % 10 + '0' ),
            ':',
            (char) ( dt.Minute / 10 + '0' ),
            (char) ( dt.Minute % 10 + '0' ),
            ':',
            (char) ( dt.Second / 10 + '0' ),
            (char) ( dt.Second % 10 + '0' ),
            'Z',
        };
        return new string( ca );
    }
person cskwg    schedule 18.05.2021