Comment produire une chaîne DateTimeOffset à partir de Noda Time OffsetDateTetime en défaut pour un format de culture actuel?

StackOverflow https://stackoverflow.com//questions/23019131

Question

Supposons que je n'ai que le temps Noda Time localDateTime myLocalDateTime et décalent des variables MyOffset.Pour produire une chaîne DateTimeOffset dans le format ISO8601, j'utilise

var offsetDateTimePattern = OffsetDateTimePattern.Create(OffsetDateTimePattern.ExtendedIsoPattern.PatternText, CultureInfo.InvariantCulture, defaultOffsetDateTime);
var resDateTimeOffsetISO8601 = offsetDateTimePattern.Format(new OffsetDateTime(myLocalDateTime, myOffset));

Maintenant, je souhaite également produire une chaîne DateTimeOffset dans une valeur par défaut pour un format de culture actuel.

pour les États-Unis, ce serait comme "4/10/2014 15:03:11 -07: 00".Je pensais à utiliser une combinaison de modèle "G" avec la courroi en courant pour la partie DateTime, suivi du format "M" pour le décalage.Comment ferais-je cela?Quelque chose comme utiliser "g m" comme un texte de motif?

var offsetDateTimePatternLocal = OffsetDateTimePattern.Create("G m", CultureInfo.CurrentCulture, defaultOffsetDateTime);
var resDateTimeOffsetCurrentCulture = offsetDateTimePattern.Format(new OffsetDateTime(myLocalDateTime, myOffset));

(question de panaling liée a été posée ici: http://goo.gl/oveqjt )

Était-ce utile?

La solution

Je pense que le mieux que vous puissiez faire si vous souhaitez préserver le comportement conscient de la culture du formateur "G" est quelque chose comme ceci:

var ldtPattern = LocalDateTimePattern.CreateWithCurrentCulture("G");
var offsetPattern = OffsetPattern.CreateWithCurrentCulture("m");
var result = ldtPattern.Format(localDateTime) + " " + offsetPattern.Format(resOffset);

Le problème est que OffsetDateTimePattern n'a pas de modèles standard sensibles à la culture. Voir le Guide de l'utilisateur pour plus de détails .Je pense que cela devrait probablement être corrigé dans une version future.

Si vous voulez formater avec un motif fixe, vous pourriez.Mais alors vous auriez besoin de connaître le modèle de la culture à l'avance.

var pattern = OffsetDateTimePattern.Create("M/dd/yyyy h:mm:ss tt o<m>", CultureInfo.InvariantCulture, defaultOffsetDateTime);
var result = pattern.Format(new OffsetDateTime(localDateTime, resOffset));

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top