Como produzir DateTimeOffset cadeia de Noda Tempo OffsetDateTime em um padrão para uma cultura atual formato?

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

Pergunta

Suponha que eu tenha Noda Tempo LocalDateTime myLocalDateTime e o Deslocamento myOffset variáveis.Para produzir um DateTimeOffset de seqüência de caracteres em ISO8601 formato de eu usar

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

Agora, eu também quero produzir DateTimeOffset de seqüência de caracteres em um padrão para a cultura atual formato.

Para os EUA, seria como "4/10/2014 3:03:11 PM -07:00".Eu estava pensando em usar uma combinação de "G" padrão com CurrentCulture para DateTime parte, seguido por "m" formato de Deslocamento.Como eu faria isso?Algo como usar "G m" como um padrão de texto?

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

(Relacionados com a análise de questão, foi perguntado aqui: http://goo.gl/OVeQJT)

Foi útil?

Solução

Eu acho que o melhor que você poderia fazer se você quiser preservar a cultura de reconhecimento de comportamento do "G" formatador é algo como isto:

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

O problema é que OffsetDateTimePattern não tem a cultura de reconhecimento de padrões. Consulte o guia do usuário para obter detalhes.Eu acho que isso provavelmente deve ser corrigido em uma versão futura.

Se você deseja formatar com um padrão fixo, você pode.Mas, em seguida, você precisa saber o padrão para a cultura antecipadamente.

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 em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top