Формат даты yyyy-MM-ddTHH: mm: ssZ
Я предполагаю, что это должно быть довольно просто, но не получилось:(.
В этом формате Z является часовым поясом.
T - длинный шаблон времени
Как мне получить дату в этом формате, за исключением использования
DateTime dt = DateTime.Now;
Console.WriteLine(dt.ToString("yyyy-MM-ddTHH:mm:ssZ"));
в С#
Ответы
Ответ 1
Использование UTC
ISO 8601 (форматы даты и времени MSDN)
Console.WriteLine(DateTime.UtcNow.ToString("s") + "Z");
2009-11-13T10: 39: 35Z
Z существует, потому что
Если время в UTC, добавьте 'Z' непосредственно после времени без пространство. "Z" - это обозначение зоны для нулевое смещение UTC. "09:30 UTC" поэтому представлены как "09: 30Z" или "0930Z". "14:45:15 UTC" будет "14: 45: 15Z" или "144515Z".
Если вы хотите включить смещение
int hours = TimeZoneInfo.Local.BaseUtcOffset.Hours;
string offset = string.Format("{0}{1}",((hours >0)? "+" :""),hours.ToString("00"));
string isoformat = DateTime.Now.ToString("s") + offset;
Console.WriteLine(isoformat);
Две вещи, которые нужно отметить: + или - необходимо после времени, но, очевидно, + не показывают положительные числа. Согласно wikipedia, смещение может быть в формате + hh или + hh: mm. Я остался на несколько часов.
Насколько я знаю, RFC1123 (дата HTTP, формат "u" ) не предназначена для смещения часовых поясов. Все времена предназначены для GMT/UTC.
Ответ 2
Console.WriteLine(DateTime.UtcNow.ToString("o"));
Console.WriteLine(DateTime.Now.ToString("o"));
Выходы:
2012-07-09T19:22:09.1440844Z
2012-07-09T12:22:09.1440844-07:00
Ответ 3
Посмотрите здесь на шаблонах "u" и "s". Сначала нет разделителя 'T', а второй - без суффикса часовой пояс.
Ответ 4
Один вариант может преобразовать DateTime в ToUniversalTime() перед преобразованием в строку с использованием формата "o" . Например,
var dt = DateTime.Now.ToUniversalTime();
Console.WriteLine(dt.ToString("o"));
Он выведет:
2016-01-31T20:16:01.9092348Z
Ответ 5
Формат "o" отличается для DateTime vs DateTimeOffset: (
DateTime.UtcNow.ToString("o") -> "2016-03-09T03:30:25.1263499Z"
DateTimeOffset.UtcNow.ToString("o") -> "2016-03-09T03:30:46.7775027+00:00"
Мой последний ответ
DateTimeOffset.UtcDateTime.ToString("o") //for DateTimeOffset type
DateTime.UtcNow.ToString("o") //for DateTime type
Ответ 6
Код для одной строки для этого.
var temp = DateTime.UtcNow.ToString("yyyy-MM-ddTHH\\:mm\\:ssZ");
Ответ 7
Он отлично работает с форматами datetime для запросов Salesforce REST API
DateTime now = DateTime.UtcNow;
string startDate = now.AddDays(-5).ToString("yyyy-MM-ddTHH\\:mm\\:ssZ");
string endDate = now.ToString("yyyy-MM-ddTHH\\:mm\\:ssZ");
//REST service Query
string salesforceUrl= https://csxx.salesforce.com//services/data/v33.0/sobjects/Account/updated/?start=" + startDate + "&end=" + endDate;
// https://csxx.salesforce.com/services/data/v33.0/sobjects/Account/updated/?start=2015-03-10T15:15:57Z&end=2015-03-15T15:15:57Z
Он возвращает результаты Salesforce без каких-либо проблем.
Ответ 8
В С# 6+ вы можете использовать интерполяцию строк и сделать это более кратким:
$"{DateTime.UtcNow:s}Z"
Ответ 9
Вы можете разделить вещи, для этого потребуется больше кода, но он будет работать так, как вам нравится:
DateTime year = DateTime.Now.Year;
DateTime month = DateTime.Now.Month;
DateTime day = DateTime.Now.Day;
ЭСТ.
наконец:
Console.WriteLine(year+month+day+etc.);
Это очень смелый способ обработки, хотя...