Wie erstelle ich eine DateTimeOffset-Zeichenfolge aus Noda Time OffsetDateTime in einem Standardformat für ein aktuelles Kulturformat?

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

Frage

Angenommen, ich habe die Variablen Noda Time LocalDateTime myLocalDateTime und Offset myOffset.Um eine DateTimeOffset-Zeichenfolge im ISO8601-Format zu erzeugen, verwende ich

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

Jetzt möchte ich auch eine DateTimeOffset-Zeichenfolge in einem Standardformat für ein aktuelles Kulturformat erzeugen.

Für die USA wäre es etwa „10.04.2014 15:03:11 – 19:00 Uhr“.Ich habe darüber nachgedacht, eine Kombination aus „G“-Muster und CurrentCulture für den DateTime-Teil zu verwenden, gefolgt vom „m“-Format für Offset.Wie würde ich das machen?So etwas wie die Verwendung von „G m“ als Mustertext?

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

(Hier wurde eine entsprechende Parsing-Frage gestellt: http://goo.gl/OVeQJT)

War es hilfreich?

Lösung

Ich denke, das Beste, was Sie tun können, wenn Sie das kulturbewusste Verhalten der Menschen bewahren wollen "G" Der Formatierer sieht etwa so aus:

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

Das Problem ist, dass OffsetDateTimePattern verfügt über keine kulturbewussten Standardmuster. Einzelheiten finden Sie im Benutzerhandbuch.Ich denke, dass dies wahrscheinlich in einer zukünftigen Version behoben werden sollte.

Wenn Sie mit einem festen Muster formatieren möchten, können Sie dies tun.Aber dann müssten Sie das Muster für die Kultur im Voraus kennen.

var pattern = OffsetDateTimePattern.Create("M/dd/yyyy h:mm:ss tt o<m>", CultureInfo.InvariantCulture, defaultOffsetDateTime);
var result = pattern.Format(new OffsetDateTime(localDateTime, resOffset));
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top