yyyy para mmmm formato fecha ddthh convert c#

c# - para - yyyy mm ddthh mm ss 05 00



formato de fecha aaaa-MM-ddTHH: mm: ssZ (9)

Supongo que esto debería ser bastante simple, pero no pude conseguirlo :(. En este formato, Z es la zona horaria.
T es un patrón de tiempo largo
¿Cómo podría obtener una fecha en este formato, excepto mediante el uso de

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

Cª#


Usando UTC

ISO 8601 ( formatos de fecha y hora de MSDN )

Console.WriteLine(DateTime.UtcNow.ToString("s") + "Z");

2009-11-13T10: 39: 35Z

La Z está ahí porque

Si la hora está en UTC, agregue una ''Z'' directamente después del tiempo sin espacio. ''Z'' es el designador de zona para el desplazamiento UTC cero. "09:30 UTC" se representa por lo tanto como "09: 30Z" o "0930Z". "14:45:15 UTC" sería "14: 45: 15Z" o "144515Z".

Si desea incluir un desplazamiento

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);

Dos cosas a tener en cuenta: + o - es necesario después del tiempo, pero obviamente + no se muestra en los números positivos. Según wikipedia, el desplazamiento puede estar en formato + hh o + hh: mm. Me he limitado a solo horas.

Hasta donde yo sé, RFC1123 (fecha HTTP, el formateador "u") no está destinado a dar compensaciones de zona horaria. Todos los horarios están destinados a ser GMT / UTC.


Código de una sola línea para esto.

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


El formato "o" es diferente para DateTime frente a DateTimeOffset :(

DateTime.UtcNow.ToString("o") -> "2016-03-09T03:30:25.1263499Z" DateTimeOffset.UtcNow.ToString("o") -> "2016-03-09T03:30:46.7775027+00:00"

Mi respuesta final es

DateTimeOffset.UtcDateTime.ToString("o") //for DateTimeOffset type DateTime.UtcNow.ToString("o") //for DateTime type


En C # 6+ puedes usar la interpolación de cuerdas y hacer esto más escueto:

$"{DateTime.UtcNow:s}Z"


Funciona bien con los formatos de fecha y hora de consulta de API REST de Salesforce

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

Devuelve los resultados de Salesforce sin ningún problema.


Mire here patrones "u" y "s". Primero, sin el separador ''T'', y el segundo sin sufijo de zona horaria.


Podrías dividir las cosas, requeriría más código pero funcionaría como a ti te gusta:

DateTime year = DateTime.Now.Year; DateTime month = DateTime.Now.Month; DateTime day = DateTime.Now.Day;

ect.

finalmente:

Console.WriteLine(year+month+day+etc.);

Esta es una forma muy audaz de manejarlo ...


Una opción podría ser convertir DateTime a ToUniversalTime () antes de convertir a cadena con el formato "o" . Por ejemplo,

var dt = DateTime.Now.ToUniversalTime(); Console.WriteLine(dt.ToString("o"));

Saldrá:

2016-01-31T20:16:01.9092348Z


Console.WriteLine(DateTime.UtcNow.ToString("o")); Console.WriteLine(DateTime.Now.ToString("o"));

Productos:

2012-07-09T19:22:09.1440844Z 2012-07-09T12:22:09.1440844-07:00