2015-08-03 14 views
5

Ho un ZonedDateTime e voglio visualizzarlo in modo tale che il datetime sia formattato con la data breve e il breve tempo configurato sulla workstation seguito dall'offset (qualcosa del genere. .. 05/01/2005 02:30 PM -05: 00). Mi aspettavo qualcosa di simile a questo dovrebbe funzionare ...Con NodaTime, come si formatta un ZonedDateTime nella cultura corrente

var patternDateTimeOffset = 
    ZonedDateTimePattern.CreateWithCurrentCulture("g o<m>", DateTimeZoneProviders.Tzdb); 
lblOriginalDateTimeAndOffsetVal.Text = patternDateTimeOffset.Format(zonedDateTime); 

MA, sembra che la "g" non è supportato in ZonedDateTimePattern il modo in cui è in LocalDateTimePattern. Il codice sopra genera una NodaTime.Text.InvalidPatternException.

Potrei sostituire la "g" con "MM/gg/aaaa hh: mm", ma poi non sta usando la cultura corrente.

Potrei utilizzare un LocalDateTimePattern per il datetime e quindi concatenare l'offset utilizzando ZonedDateTimePattern. Funziona, ma sembra brutto.

Questa sembra una cosa piuttosto comune. Sono nuovo di NodaTime, quindi sono certo che mi manchi qualcosa. Sto usando NodaTime 1.3.1 e il targeting .net 4.0. Qualsiasi aiuto è apprezzato.

+0

La prego di registrare questa come richiesta di funzionalità in [il rilevatore di problemi Noda Time] (https://github.com/nodatime/nodatime/issues)? Grazie. –

risposta

6

g va bene come specificatore di modello standard, ma solo per conto proprio; non può far parte di un modello personalizzato, che è ciò che stai effettivamente cercando di fare qui. Si sta effettivamente cercando di mescolare e abbinare, che noi non sosteniamo :(

Così come le opzioni che avete già delineato (che condivido funzionerà, ma sono un po 'brutto) è possibile utilizzare

var bclDateFormat = CultureInfo.CurrentCulture.DateTimeFormat; 
var localDateTimePattern = 
    bclDateFormat.ShortDatePattern + " " + bclDateFormat.ShortTimePattern; 
var patternDateTimeOffset = ZonedDateTimePattern.CreateWithCurrentCulture(
    localDateTimePattern + " o<m>", 
    DateTimeZoneProviders.Tzdb); 

Ancora non non è terribilmente piacevole, è vero - ma questo è effettivamente ciò che g fa comunque (usa le due modelli corti esistenti e solo spazio-separa loro)

Come ha detto Matt, compila una richiesta di funzionalità -. io non sono certo qual è l'approccio migliore qui, ma ci penserò io.

Problemi correlati