формат даты гггг-мм-ддтчч:мм:ссz
Я предполагаю, что это должно быть довольно простой, но достать не смог :(.
В этом формате Z-часовой пояс.
Т картина долгого времени
Как я могу получить дату в этом формате можно только с помощью
DateTime dt = DateTime.Now;
Console.WriteLine(dt.ToString("yyyy-MM-ddTHH:mm:ssZ"));
в C#
9 ответов:
использование UTC
ISO 8601 (форматы MSDN datetime)
Console.WriteLine(DateTime.UtcNow.ToString("s") + "Z");2009-11-13T10:39:35Z
The Z потому что
если время в UTC, добавьте 'Z' непосредственно после времени без пространство. 'Z' - это обозначение зоны для нулевой часовой пояс. "09: 30 UTC" is поэтому представлено как "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);две вещи, чтобы отметить: + или - необходимо после времени, но, очевидно, + не отображается на положительных числах. Согласно Википедии смещение может быть в формате +hh или +hh: мм. Я держал всего несколько часов.
насколько я знаю, RFC1123 (дата HTTP, форматер "u") не предназначен для смещения часовых поясов. Все времена предназначены для GMT / UTC.
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
формат"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
посмотреть здесь в шаблонах" u "и" s". Первый без разделителя 'T', а второй без суффикса часового пояса.
одним из вариантов может быть преобразование DateTime в ToUniversalTime() перед преобразованием в строку, используя "о". Например,
var dt = DateTime.Now.ToUniversalTime(); Console.WriteLine(dt.ToString("o"));Он будет выводить:
2016-01-31T20:16:01.9092348Z
он отлично работает с форматами Salesforce REST API query datetime
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 без каких-либо проблем.
В C# 6+ Вы можете использовать строковую интерполяцию и сделать это более кратким:
$"{DateTime.UtcNow:s}Z"
вы можете разделить вещи, это потребует больше кода, но будет работать именно так, как вам нравится:
DateTime year = DateTime.Now.Year; DateTime month = DateTime.Now.Month; DateTime day = DateTime.Now.Day;ect.
и наконец:
Console.WriteLine(year+month+day+etc.);Это очень смелый способ справится с этим...
Comments