2015-08-03 5 views
5

У меня есть ZonedDateTime, и я хочу отобразить его таким образом, чтобы время datetime форматировалось с короткой датой и коротким временем, настроенным на рабочей станции, а затем смещением (что-то вроде. .. 05/01/2005 02:30 PM -05: 00). Я ожидал чего-то, как это будет работать ...С NodaTime, как мне форматировать ZonedDateTime в текущей культуре

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

НО, оказывается, что «г» не поддерживается в ZonedDateTimePattern так, как это в LocalDateTimePattern. Приведенный выше код генерирует исключение NodaTime.Text.InvalidPatternException.

Я мог бы заменить «g» на «MM/dd/yyyy hh: mm», но тогда он не использует текущую культуру.

Я мог бы использовать LocalDateTimePattern для datetime, а затем объединить смещение с помощью ZonedDateTimePattern. Это работает, но кажется уродливым.

Это похоже на довольно распространенную вещь. Я новичок в NodaTime, поэтому я уверен, что что-то не хватает. Я использую NodaTime 1.3.1 и таргетинг .net 4.0. Любая помощь приветствуется.

+0

Не могли бы вы зарегистрировать это как запрос функции в [Отслеживание ошибок Noda Time] (https://github.com/nodatime/nodatime/issues)? Благодарю. –

ответ

6

g отлично подходит как стандартный шаблонный указатель - но только сам по себе; он не может быть частью шаблона, который вы пытаетесь сделать здесь. Вы эффективно пытаются смешивать и матч, который мы не поддерживаем :(

Как вариантов вы уже изложенных (который я согласен будет работать, но которые несколько некрасиво), вы можете использовать

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

Еще не очень приятно, правда - но это эффективно, что g делает в любом случае (использует два существующих коротких моделей и просто пространственно-отделяющую их)

Как сказал Мэтт, пожалуйста, запрос на функцию. - Я не что лучший подход здесь, но я подумаю об этом.