формат даты гггг-мм-ддтчч:мм:ссz



Я предполагаю, что это должно быть довольно простой, но достать не смог :(.
В этом формате Z-часовой пояс.

Т картина долгого времени

Как я могу получить дату в этом формате можно только с помощью



DateTime dt = DateTime.Now;
Console.WriteLine(dt.ToString("yyyy-MM-ddTHH:mm:ssZ"));


в C#

489   9  
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

однострочный код для этого.

var temp   =  DateTime.UtcNow.ToString("yyyy-MM-ddTHH\:mm\:ssZ");

он отлично работает с форматами 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

    Ничего не найдено.