Как изменить формат даты (название месяца) в iReport?

У меня есть требование изменить формат даты в iReport. В настоящее время я использовал SQL-запрос для сбора данных. Вот мой запрос в iReport

SELECT DATE_FORMAT(CURRENT_DATE,'%d-%m-%Y') AS currentDate, Upper(e.name) AS name , e.address, Upper(ea.comName) AS comName blablablabla.....

и поле currentDate будет показывать 28-12-2011

Каково требование изменить месяц (12) на «декабрь», а не «декабрь». Или если месяц 1 значит в отчете должно быть "Januari".

Названия месяцев: [Januari, Februari, Mac, April, Mei, Jun, Julai, Ogos, September, Oktober, November, Disember].

Могу ли я выполнить эти условия в iReport?

Заранее спасибо.


person Hariawan    schedule 28.12.2011    source источник


Ответы (2)


Вы можете создать и использовать скриптлет или использовать выражения, как в этих примерах:

  • Используя национальный язык (ms_MY, Малайзия):
<field name="currentDate" class="java.sql.Timestamp"/>
...
<textField>
    <reportElement x="300" y="0" width="100" height="20"/>
    <textElement/>
    <textFieldExpression><![CDATA[(new DateFormatSymbols(new Locale("ms", "MY")).getMonths())[$F{currentDate}.getMonth()]]]></textFieldExpression>
</textField>
  • Использование условного оператора ? :
<field name="currentDate" class="java.sql.Timestamp"/>
...
<textField>
    <reportElement x="200" y="0" width="100" height="20"/>
    <textElement/>
    <textFieldExpression><![CDATA[$F{currentDate}.getMonth() == 0 ?
    "Januari" : $F{currentDate}.getMonth() == 1 ?
    "Februari" : $F{currentDate}.getMonth() == 2 ?
    "Mac" : $F{currentDate}.getMonth() == 3 ?
    "April" : $F{currentDate}.getMonth() == 4 ?
    "Mei" : $F{currentDate}.getMonth() == 5 ?
    "Jun" : $F{currentDate}.getMonth() == 6 ?
    "Julai" : $F{currentDate}.getMonth() == 7 ?
    "Ogos" : $F{currentDate}.getMonth() == 8 ?
    "September" : $F{currentDate}.getMonth() == 9 ?
    "Oktober"  : $F{currentDate}.getMonth() == 10 ?
    "November"  : $F{currentDate}.getMonth() == 11 ?
    "Disember" : "Unknown"
    ]]></textFieldExpression>
</textField>
  • Вы можете прочитать эту статью о том, как использовать scriptlet< /эм>.
person Alex K    schedule 28.12.2011
comment
@Hariawan Я только что добавил новое решение - person Alex K; 28.12.2011

Чтобы отображать даты в разных форматах, одним из вариантов является форматирование дат на основе региональных настроек. Например, в следующем выражении используется языковой стандарт текущего пользователя:

DateFormat.getDateInstance(DateFormat.LONG, $P{REPORT_LOCALE}).format($F{currentDate})
person Markus Pscheidt    schedule 10.06.2013