791
Примечание для читателей: несколько комментаторов указали на некоторые проблемы в этом ответе (особенно связанные с первым предложением). Обратитесь к разделу комментариев для получения дополнительной информации.
DateTime.UtcNow.ToString("yyyy-MM-ddTHH\\:mm\\:ss.fffffffzzz");
Это дает вам дату, аналогичную 2008-09-22T13: 57: 31.2311892-04: 00 .
Другой способ это:
DateTime.UtcNow.ToString("o");
который дает вам 2008-09-22T14: 01: 54.9571247Z
Чтобы получить указанный формат, вы можете использовать:
DateTime.UtcNow.ToString("yyyy-MM-ddTHH:mm:ssZ")
ToString("yyyy-MM-ddTHH:mm:ssK")
это для работы (с плагином jquery timeago, который я использовал).dt.ToString("s") + dt.ToString("zzz")
// 2013-12-05T07: 19: 04-08: 00DateTime.UtcNow.ToString("s", System.Globalization.CultureInfo.InvariantCulture)
должен дать вам то, что вы ищете, поскольку спецификатор формата "s" описывается как сортируемый шаблон даты / времени; соответствует ISO 8601источник
DateTime.UtcNow.ToString(CultureInfo.InvariantCulture.DateTimeFormat.SortableDateTimePattern);
Однако, поскольку все они исключают часовой пояс и т. Д., У вас может не быть иного выбора, кроме как использовать явный форматер, например:"yyyy-MM-ddTHH:mm:ss.fffZ"
Z
выглядит примерно так:DateTime.UtcNow.ToString(c, CultureInfo.InvariantCulture)) => 2012-06-26T11:55:36
и нет миллисекундного разрешения, которое было бы очень приятно иметь, поскольку компьютеры совершали значительное количество тактов в секунду.o
вы получаете2012-06-26T11:55:36.1007668Z
значащие36.1007668
секунды, вы получаете разрешение до1/10^7
секунды. От ISO8601: 2004If a decimal fraction is included, lower order time elements (if any) shall be omitted and the decimal fraction shall be divided from the integer part by the decimal sign [...] the comma (,) or full stop (.)
"s"
бессмысленно, потому что: «O» (или «o»), «R» (или «r»), «s» и «u». Эти строки соответствуют строкам нестандартного формата, определенным инвариантной культурой. Они создают строковые представления значений даты и времени, которые должны быть одинаковыми в разных культурах ».DateTime.Now.ToString("s", new CultureInfo(myCulture))
.Возвращает что-то вроде 2008-04-10T06: 30: 00
UtcNow
очевидно, возвращает время UTC, поэтому нет никакого вреда в:источник
a + b
компилируется с тем же промежуточным кодом, что иstring.Concat(a, b)
(при условии, что a и b являются строками, конечно), поэтому нет никакой разницы в производительности или потреблении памяти.Использование:
ВЫВОД
Источники:
Стандартные строки формата даты и времени (MSDN)
Пользовательские строки формата даты и времени (MSDN)
источник
string strLocalTimeAndOffset_custom = localTimeAndOffset.ToString("yyyy-MM-ddTHH:mm:ssK");
приведет к:strLocalTimeAndOffset_custom: 2012-09-17T22:02:51-07:00
o
это формат ISO-8601.=>
источник
Вы можете получить «Z» ( ISO 8601 UTC ) со следующим кодом:
Вот почему:
ISO 8601 имеет несколько разных форматов:
DateTimeKind.Local
DateTimeKind.Utc
DateTimeKind.Unspecified
.NET предоставляет нам перечисление с этими опциями:
Примечание . Если вы примените Visual Studio 2008 «утилита наблюдения» к части toString («o»), вы можете получить другие результаты, я не знаю, является ли это ошибкой, но в этом случае вы получите лучшие результаты, используя переменную String если вы отлаживаете.
Источник: Стандартные строки формата даты и времени (MSDN)
источник
Если вы должны использовать DateTime для ISO 8601, то ToString («o») должен дать то, что вы ищете. Например,
Однако DateTime + TimeZone может представлять другие проблемы, как описано в сообщении в блоге DateTime и DateTimeOffset в .NET: передовой опыт и распространенные ошибки :
источник
Удивило, что никто не предложил это:
UniversalSortableDateTimePattern получает вас почти весь путь к тому , что вы хотите (который является больше RFC 3339 представления).
Добавлено: я решил использовать тесты, которые были в ответе https://stackoverflow.com/a/43793679/653058, чтобы сравнить, как это работает.
ТЛ: д-р; на моем дорогом старом ноутбуке он стоит чуть больше половины миллисекунды :-)
Реализация:
Результаты:
источник
Я бы просто использовал
XmlConvert
:Это автоматически сохранит часовой пояс.
источник
У большинства из этих ответов есть миллисекунды / микросекунды, которые явно не поддерживаются ISO 8601. Правильный ответ будет:
Ссылки:
источник
ПРИМЕЧАНИЕ. В зависимости от того, какую конверсию вы выполняете, вы будете использовать первую строку (наиболее понравившуюся) или вторую.
Обязательно применяйте формат только по местному времени, так как «zzz» - это информация о часовом поясе для преобразования в UTC.
источник
- из MSDN
источник
.ToString("s")
?Чтобы преобразовать DateTime.UtcNow в строковое представление yyyy-MM-ddTHH: mm: ssZ , вы можете использовать метод ToString () структуры DateTime с пользовательской строкой форматирования. При использовании строк нестандартного формата с DateTime важно помнить, что вам нужно экранировать разделители, используя одинарные кавычки.
Следующее вернет желаемое строковое представление:
источник
Интересно, что пользовательский формат «гггг-мм-ддтчч: мм: сск» (без мс) - самый быстрый метод форматирования.
Также интересно, что формат "S" медленный на Классическом и быстрый на Core ...
Конечно, числа очень близки, разница между некоторыми строками незначительна (тесты с суффиксом
_Verify
такие же, как и без суффикса, демонстрирует повторяемость результатов)Код:
https://github.com/dotnet/BenchmarkDotNet был использован
источник
Используя Newtonsoft.Json, вы можете сделать
Пример: https://dotnetfiddle.net/O2xFSl
источник
Если вы разрабатываете под SharePoint 2010 или выше, вы можете использовать
источник
.ToString("o")
или, лучше,$"My complicated string {dt:o}"
.Для форматирования, например 2018-06-22T13: 04: 16, который можно передать в URI API, используйте:
источник
Как уже упоминалось в другом ответе,
DateTime
имеет проблемы с дизайном.NodaTime
Я предлагаю использовать NodaTime для управления значениями даты / времени:
Форматирование
Итак, для создания и форматирования
ZonedDateTime
вы можете использовать следующий фрагмент кода:Для меня
NodaTime
код выглядит довольно многословно. Но типы действительно полезны. Они помогают правильно обрабатывать значения даты / времени.Newtonsoft.Json
источник