Comment produire une chaîne DateTimeOffset à partir de Noda Time OffsetDateTetime en défaut pour un format de culture actuel?
-
21-12-2019 - |
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 )
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));