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