Como produzir DateTimeOffset cadeia de Noda Tempo OffsetDateTime em um padrão para uma cultura atual formato?
-
21-12-2019 - |
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)
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));