Come produrre una stringa datetimeoffset da Noda Time offsetDateTime in un default per un formato di coltura corrente?

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

Domanda

Supponiamo di avere Noda Time Localdatetime MyLocalDateTime e offset MyoffSet Variables.Per produrre una stringa datetimeoffset in formato ISO8601 uso

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

Ora, voglio anche produrre una stringa datetimeoffset in A in un valore predefinito per un formato di coltura corrente.

Per gli Stati Uniti sarebbe come "4/10/2014 3:03:11 PM -07: 00".Stavo pensando di usare una combinazione di pattern "G" con currenculture per la parte DateTime seguita da un formato "M" per offset.Come potrei farlo?Qualcosa come usare "g m" come testo modello?

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

(è stata chiesta una domanda analizzata correlata qui: http://goo.gl/veqjt )

È stato utile?

Soluzione

Penso che il meglio che tu possa fare se vuoi preservare il comportamento consapevole della cultura del formattore "G" è qualcosa del genere:

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

Il problema è che OffsetDateTimePattern non ha schemi standard a conoscenza della cultura. Vedi la guida dell'utente per i dettagli .Penso che questo dovrebbe probabilmente essere rettificato in una versione futura.

Se si desidera formattare con un modello fisso, è possibile.Ma poi avresti bisogno di conoscere il modello per la cultura in anticipo.

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

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top