Установить формат продолжительности/периода времени joda по умолчанию в Grails

При использовании времени joda с Grails можно установить значение по умолчанию LocalDate, как они сделали здесь. Я хочу сделать то же самое с Duration и Period, поэтому мне не нужно что-то вводить подобно

durationFormatter.print(exampleObject.myDuration)

каждый раз, когда я хочу отобразить продолжительность или период. Я хочу вызвать метод toString() объекта Duration/Period и распечатать его в нужном формате.

Я попытался реализовать PeriodFormatter в моем файле конфигурации почти так же, как они сделали здесь, но безрезультатно. Вот что у меня есть в моем файле конфигурации:

jodatime {
    format.org.joda.time.LocalDate = "yyyy-MM-dd"
    format.org.joda.time.PeriodFormatter = { new format.org.joda.time.PeriodFormatterBuilder()
        .appendMonths()
        .appendSuffix( " month", " months" )
        .appendWeeks()
        .appendSuffix( " week", " weeks" )
        .appendDays()
        .appendSuffix( " day", " days" )
        .appendHours()
        .appendSuffix( " hour", " hours" )
        .toFormatter();
    }
}

person ubiquibacon    schedule 06.09.2012    source источник
comment
У меня были проблемы с форматированием по умолчанию, но потом я обнаружил, что он применяется только к тегу <joda:format>, предоставляемому плагином Joda-Time Grails. См. gpc.github.io/grails-joda-time/ref /Теги/format.html.   -  person Charles Wood    schedule 25.07.2013


Ответы (1)


сорт

ISOPeriodFormat

поле

cStandard  

это средство форматирования периода по умолчанию. Это поле private static и не имеет сеттера. Но вы можете изменить это значение с помощью API java-reflection.

  final Field f = ISOPeriodFormat.class.getDeclaredField("cStandard");
  f.setAccessible(true);
  f.set(null, yourPeriodFormatter);
person Ilya    schedule 07.09.2012