¿Cómo producir la cadena DataTimeOffSet de Noda Time OffsetDataTime en un valor predeterminado para un formato de cultura actual?

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

Pregunta

Supongamos que tengo las variables de MyLocaletime y Offset MyLocaldateTime y offset.Para producir una cadena de DateTimeOffset en formato ISO8601, utilizo

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

Ahora, también quiero producir una cadena DataTimeOffset en A en un valor predeterminado para un formato de cultura actual.

Para Estados Unidos, sería como "4/10/2014 3:03:11 PM -07: 00".Estaba pensando en usar una combinación de patrón "G" con CurrentCulture para la parte de DateTime, seguido de formato "M" para offset.¿Como podría hacerlo?¿Algo como usar "g m" como texto de patrón?

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

(Se preguntó la pregunta de análisis relacionada aquí: http://goo.gl/oveqjt )

¿Fue útil?

Solución

Creo que lo mejor que podría hacer si desea preservar el comportamiento de la cultura, consciente del formato de "G" es algo así:

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

El problema es que OffsetDateTimePattern no tiene ningún patrón estándar de cultura. Vea la guía del usuario para detalles .Creo que esto debería ser probablemente rectificado en una versión futura.

Si desea formatear con un patrón fijo, podría.Pero entonces tendría que conocer el patrón de la cultura por adelantado.

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

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top