format de date aaaa-MM-jjTHH: mm: ssZ

Je suppose que cela devrait être assez simple, mais ne pourrait pas l’obtenir :(. Dans ce format, Z est le fuseau horaire.
T est le modèle de temps long
Comment puis-je obtenir une date dans ce format, sauf en utilisant

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

en C #

Utiliser UTC

ISO 8601 ( formats de datetime MSDN )

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

2009-11-13T10: 39: 35Z

Le Z est là parce que

Si l’heure est en heure UTC, ajoutez un «Z» directement après l’heure sans espace. “Z” est l’indicateur de zone pour le décalage de zéro UTC. “09:30 UTC” est donc représenté par “09: 30Z” ou “0930Z”. “14:45:15 UTC” serait “14: 45: 15Z” ou “144515Z”.

Si vous voulez inclure un décalage

 int hours = TimeZoneInfo.Local.BaseUtcOffset.Hours; ssortingng offset = ssortingng.Format("{0}{1}",((hours >0)? "+" :""),hours.ToSsortingng("00")); ssortingng isoformat = DateTime.Now.ToSsortingng("s") + offset; Console.WriteLine(isoformat); 

Deux choses à noter: + ou – est nécessaire après le temps mais évidemment + ne montre pas sur les nombres positifs. Selon wikipedia, le décalage peut être au format + hh ou + hh: mm. Je n’ai gardé que quelques heures.

Pour autant que je sache, RFC1123 (HTTP date, le formateur “u”) n’est pas destiné à donner des décalages de fuseau horaire. Toutes les heures sont destinées à être GMT / UTC.

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

Les sorties:

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

Le format “o” est différent pour DateTime vs DateTimeOffset 🙁

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

Ma dernière réponse est

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

Regardez ici les motifs “u” et “s”. Le premier est sans séparateur ‘T’ et le second sans suffixe de fuseau horaire.

Une option pourrait être la conversion de DateTime en ToUniversalTime () avant la conversion en chaîne en utilisant le format “o” . Par exemple,

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

Il va sortir:

 2016-01-31T20:16:01.9092348Z 

Code de ligne unique pour cela.

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

Cela fonctionne bien avec les formats de datetime de requête d’API REST de Salesforce

 DateTime now = DateTime.UtcNow; ssortingng startDate = now.AddDays(-5).ToSsortingng("yyyy-MM-ddTHH\\:mm\\:ssZ"); ssortingng endDate = now.ToSsortingng("yyyy-MM-ddTHH\\:mm\\:ssZ"); //REST service Query ssortingng 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 

Il renvoie les résultats de Salesforce sans aucun problème.

En C # 6+, vous pouvez utiliser l’interpolation de chaînes et rendre ceci plus concis:

 $"{DateTime.UtcNow:s}Z" 

Vous pourriez diviser les choses, cela exigerait plus de code mais fonctionnerait comme vous l’aimez:

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

ect.

enfin:

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

C’est une manière très audacieuse de la traiter si …