Note aux lecteurs: Plusieurs commentateurs ont signalé quelques problèmes dans cette réponse (liés notamment à la première suggestion). Reportez-vous à la section des commentaires pour plus d'informations.
DateTime.UtcNow.ToString("yyyy-MM-ddTHH\\:mm\\:ss.fffffffzzz");
Cela vous donne une date similaire à 2008-09-22T13: 57: 31.2311892-04: 00 .
Une autre façon est:
DateTime.UtcNow.ToString("o");
ce qui vous donne 2008-09-22T14: 01: 54.9571247Z
Pour obtenir le format spécifié, vous pouvez utiliser:
DateTime.UtcNow.ToString("yyyy-MM-ddTHH:mm:ssZ")
Options de formatage de DateTime
ToString("yyyy-MM-ddTHH:mm:ssK")
pour que cela fonctionne (avec le plugin jquery timeago que j'utilisais).dt.ToString("s") + dt.ToString("zzz")
DateTime.UtcNow.ToString("s", System.Globalization.CultureInfo.InvariantCulture)
devrait vous donner ce que vous recherchez car le spécificateur de format "s" est décrit comme un modèle de date / heure triable; conforme à ISO 8601.la source
DateTime.UtcNow.ToString(CultureInfo.InvariantCulture.DateTimeFormat.SortableDateTimePattern);
Cependant, étant donné que tous ces éléments excluent le fuseau horaire, etc., vous pourriez avoir d'autre choix que d'utiliser le formateur explicite, c'est"yyyy-MM-ddTHH:mm:ss.fffZ"
Z
ressemblant à ceci:DateTime.UtcNow.ToString(c, CultureInfo.InvariantCulture)) => 2012-06-26T11:55:36
et il n'y a pas de résolution en millisecondes qui est très agréable à avoir puisque les ordinateurs font un bon nombre de ticks par seconde.o
vous obtenez des secondes2012-06-26T11:55:36.1007668Z
significatives36.1007668
, vous obtenez donc une résolution jusqu'à1/10^7
une seconde. De ISO8601: 2004If a decimal fraction is included, lower order time elements (if any) shall be omitted and the decimal fraction shall be divided from the integer part by the decimal sign [...] the comma (,) or full stop (.)
"s"
n'a aucun sens car: "" O "(ou" o ")," R "(ou" r ")," s "et" u ". Ces chaînes correspondent à des chaînes de format personnalisé définies par la culture invariante. Ils produisent des représentations de chaînes de valeurs de date et d'heure qui sont censées être identiques d'une culture à l'autre. »DateTime.Now.ToString("s", new CultureInfo(myCulture))
.Renvoie quelque chose comme 2008-04-10T06: 30: 00
UtcNow
renvoie évidemment une heure UTC donc il n'y a aucun mal à:la source
a + b
compile dans le même code intermédiaire questring.Concat(a, b)
(en supposant que a et b sont des chaînes, bien sûr) donc il n'y a pas de différence de performance ou de consommation de mémoire.Utilisation:
PRODUCTION
Sources:
Chaînes de format de date et d'heure standard (MSDN)
Chaînes de format de date et d'heure personnalisées (MSDN)
la source
string strLocalTimeAndOffset_custom = localTimeAndOffset.ToString("yyyy-MM-ddTHH:mm:ssK");
entraînerait:strLocalTimeAndOffset_custom: 2012-09-17T22:02:51-07:00
o
est un format ISO-8601.=>
la source
Vous pouvez obtenir le "Z" ( ISO 8601 UTC ) avec le code suivant:
Voici pourquoi:
L'ISO 8601 a différents formats:
DateTimeKind.Local
DateTimeKind.Utc
DateTimeKind.Unspecified
.NET nous fournit une énumération avec ces options:
Remarque : Si vous appliquez l '"utilitaire de surveillance" de Visual Studio 2008 à la partie toString ("o"), vous pouvez obtenir des résultats différents, je ne sais pas si c'est un bogue, mais dans ce cas, vous obtenez de meilleurs résultats en utilisant une variable String si vous déboguez.
Source: chaînes de format de date et d'heure standard (MSDN)
la source
Si vous devez utiliser DateTime selon ISO 8601, alors ToString ("o") devrait fournir ce que vous recherchez. Par exemple,
Cependant, DateTime + TimeZone peut présenter d'autres problèmes comme décrit dans le billet de blog DateTime et DateTimeOffset dans .NET: bonnes pratiques et pièges courants :
la source
Surpris que personne ne l'ait suggéré:
Le UniversalSortableDateTimePattern vous obtient presque tout le chemin à ce que vous voulez (qui est plus une RFC 3339 représentation).
Ajouté: j'ai décidé d'utiliser les repères qui étaient dans la réponse https://stackoverflow.com/a/43793679/653058 pour comparer comment cela fonctionne.
tl: dr; c'est à la fin cher mais encore un peu plus d'une demi-milliseconde sur mon vieux portable merdique :-)
La mise en oeuvre:
Résultats:
la source
Je voudrais simplement utiliser
XmlConvert
:Il conservera automatiquement le fuseau horaire.
la source
La plupart de ces réponses ont des millisecondes / microsecondes, ce qui n'est clairement pas pris en charge par ISO 8601. La bonne réponse serait:
Références:
la source
REMARQUE: En fonction de la conversion que vous effectuez de votre côté, vous utiliserez la première ligne (la plus semblable) ou la seconde.
Assurez-vous d'appliquer le format uniquement à l'heure locale, car "zzz" correspond aux informations de fuseau horaire pour la conversion UTC.
la source
- depuis MSDN
la source
.ToString("s")
?Pour convertir DateTime.UtcNow en une représentation sous forme de chaîne aaaa-MM-jjTHH: mm: ssZ , vous pouvez utiliser la méthode ToString () de la structure DateTime avec une chaîne de mise en forme personnalisée. Lorsque vous utilisez des chaînes de format personnalisé avec un DateTime, il est important de se rappeler que vous devez échapper à vos séparateurs à l'aide de guillemets simples.
Ce qui suit renverra la représentation de chaîne que vous vouliez:
la source
Il est intéressant de noter que le format personnalisé "aaaa-MM-jjTHH: mm: ssK" (sans ms) est la méthode de formatage la plus rapide.
Il est également intéressant de noter que le format "S" est lent sur Classic et rapide sur Core ...
Bien sûr, les nombres sont très proches, entre certaines lignes, la différence est insignifiante (les tests avec suffixe
_Verify
sont les mêmes que ceux qui n'en ont pas, démontrent la répétabilité des résultats)Code:
https://github.com/dotnet/BenchmarkDotNet a été utilisé
la source
En utilisant Newtonsoft.Json, vous pouvez faire
Exemple: https://dotnetfiddle.net/O2xFSl
la source
Si vous développez sous SharePoint 2010 ou supérieur, vous pouvez utiliser
la source
.ToString("o")
mieux ou,$"My complicated string {dt:o}"
.Pour formater comme 2018-06-22T13: 04: 16 qui peut être passé dans l'URI d'une utilisation d'API:
la source
Comme mentionné dans d'autres réponses,
DateTime
a des problèmes de conception.NodaTime
Je suggère d'utiliser NodaTime pour gérer les valeurs de date / heure:
Mise en page
Ainsi, pour créer et formater,
ZonedDateTime
vous pouvez utiliser l'extrait de code suivant:Pour moi, le
NodaTime
code semble assez verbeux. Mais les types sont vraiment utiles. Ils aident à gérer correctement les valeurs de date / heure.Newtonsoft.Json
la source