Формат даты 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.);

Это очень смелый способ обработки, хотя...