2012-05-29 12 views
7

Estoy trabajando en un proyecto de grails. Estoy usando la red kendo en mi aplicación. Necesito crear una clase de dominio llamada "StatTimings" que contenga dos campos de tiempo startTime y endTime. No puedo usar el tipo de datos "Fecha" para esas dos variables porque el formato de hora que necesito es hh: mm. No quiero instalar ningún complemento para esto. esto es mi dominio por ahora:Campo de tiempo En la clase de dominio de grails

class StatTimings{ 

???? startTime 
???? endTime 
Date date 
AutoPosting autoPosting 
Status status 

static constraints = { 
} 

enum Status{ACTIVE,INACTIVE} 
enum AutoPosting{SERVICE_CHARGE,STAT_CHARGES,BOTH} 

}

¿Hay alguna manera de hacer que mi campo para aceptar solamente el tiempo?

Respuesta

1

El subclases de la clase java.sql.Time java.util.Date y hace casi lo mismo y se añade una aplicación personalizada toString de la siguiente manera:

public String toString() { 

    int hour = super.getHours(); 
    int minute = super.getMinutes(); 
    int second = super.getSeconds(); 
    String hourString; 
    String minuteString; 
    String secondString; 

    if (hour < 10) { 
     hourString = "0" + hour; 
    } else {   
     hourString = Integer.toString(hour); 
    } 
    if (minute < 10) { 
     minuteString = "0" + minute; 
    } else {   
     minuteString = Integer.toString(minute); 
    } 
    if (second < 10) { 
     secondString = "0" + second; 
    } else {   
     secondString = Integer.toString(second); 
    } 
    return (hourString + ":" + minuteString + ":" + secondString); 
} 

así que supongo que se podría añadir dinámicamente una Método para Fecha clase en arranque e invocarlo cuando sea necesario.

Puede ver la fuente completa here.

2

Puede usar la fecha y convertirla en el método getStartTime() al formato que necesite con la ayuda de SimpleDateFormat. De esta manera ignoras la parte de la fecha.

class StatTimings { 
    ... 

    def getStartTime() { 
     return new SimpleDateFormat("hh:mm").format(this.startTime); 
    } 

} 
3

para hacer más fácil para persistir y se unen (de HTTP params) instancias de esta clase, yo represento cada vez como dos campos enteros y añadir un poco de método de ayuda como getStartTime() y getEndTime(). Es posible que desee cambiar estos ayudantes para que devuelva Date en lugar de String (con la parte del día configurada hoy) si necesita hacer algo como calcular la diferencia entre la hora de inicio y la de finalización.

class StatTimings { 

    static transients = ['startTime', 'endTime'] 

    Integer startHours 
    Integer startMins 

    Integer endHours 
    Integer endMins 

    private String formatTime(Integer hours, Integer mins) { 
    String formattedHours = hours < 10 ? "0$hours" : hours.toString() 
    String formattedMins = mins < 10 ? "0$mins" : mins.toString() 
    "$formattedHours:$formattedMins" 
    } 

    String getStartTime() { 
    formatTime(startHours, startMins)   
    } 

    String getEndTime() { 
    formatTime(endHours, endMins) 
    } 

    static constraints = { 
    startHours range: 0..23 
    endHours range: 0..23 

    startMins range: 0..59 
    endMins range: 0..59 

    // TODO: add a custom validator that checks the end time is after start time 
    } 
} 
Cuestiones relacionadas