2014-11-25 56 views
0
HijrahChronology.INSTANCE.date(LocalDate.of(year, month, day)); 

此代码用来转换使用JAVA8UmalQuraCalendar API的日期伊历日期。克:formatDate Grails的标签库不java.time.chrono.HijrahDate例如工作

<g:formatDate date="${hijrahDate}" />引发了一个异常:

Class 
java.lang.IllegalArgumentException 
Message 
Unknown class: org.codehaus.groovy.grails.web.util.StreamCharBuffer 

如何在GSP格式化java.time.chrono.HijrahDate对象?

+0

你也可以说创造'hirajDate'并使其可普惠制的代码? – 2014-11-25 08:49:21

回答

0

已解决!

使用案例:

<abdennour:formatDate showTime="true" date="${new Date()}" type="hijri"/> 

另一

<abdennour:formatDate showTime="true" date="${new Date()}" format="dd/MMM/YYYY" type="hijri"/> 

注:

  • type属性不存在,就意味着你使用g:formatDate隐含
  • 如果type="hijri"format只包含ddMMM或/和YYYY,如果要显示时间,请添加showTime属性。

API

服务:

class UtilsService { 
    java.time.chrono.HijrahDate toHijri(Date date){ 

      //return HijrahChronology.INSTANCE.date(Instant.ofEpochMilli(date.getTime())); 
      Calendar cl=Calendar.getInstance() 
      cl.setTime(date); 
      return toHijri(cl.get(Calendar.YEAR), cl.get(Calendar.MONTH)+1, cl.get(Calendar.DATE)); 
     } 

     java.time.chrono.HijrahDate toHijri(int year,int month,int day){ 


      return HijrahChronology.INSTANCE.date(LocalDate.of(year, month, day)); 
     } 

} 

的Taglib:

class UtilsTagLib { 
    static namespace='abdennour' 
    def utilsService 
def formatDate={at,b-> 
     if(at?.type && at?.type?.toLowerCase()?.startsWith("hij")){ 
      at.dateh=utilsService.toHijri(at.date); 
      if(!at?.format){at?.format='dd-MM-YYYY'} 
      //at?.fullformat=at?.format 
      //at?.format='dd-MMM-YYYY' 
      String format=at.dateh?.format(DateTimeFormatter.ofPattern(at?.format)) 
      if(at?.showTime){ 
       Calendar cl=Calendar.getInstance();cl.setTime(at?.date); 
       format=format+' '+cl.get(Calendar.HOUR)+':'+cl.get(Calendar.MINUTE) 
      } 
      out << format 

     }else{ 

      out << g.formatDate(at) 
     } 

    } 
}