2010-07-08 14 views
17

Ho bisogno di ottenere il giorno, il mese, i dettagli dell'anno da un valore Date ma il getYear() è deprecato, restituisce l'anno su 2 cifre e ha problemi con Y2K (il 2008 restituisce 108). Il documento java consiglia di utilizzare java.util.calendar ma non è supportato in GWT.Ottieni dati della data (giorno, mese, anno) in GWT

Voglio evitare di inviare tutte le informazioni avanti e indietro tra il server e il client solo per gestire le date.

Modifica: Calendar sarà più supportato funzioni di gestione data dovrebbero essere attuate in GWT futur versioni: http://code.google.com/p/google-web-toolkit/issues/detail?id=603

risposta

19

Non utilizzare quei metodi deprecati su Date class in GWT.

Se non si desidera utilizzare implementazioni di date di terze parti per GWT, utilizzare una combinazione di DateTimeFormat insieme alla manipolazione delle stringhe come soluzione temporanea per il momento, fino a quando GWT non avrà un supporto migliore per la manipolazione delle date.

For date - 
DateTimeFormat.getFormat("d-M-yyyy").format(new Date()).split("-")[0] 

For month - 
DateTimeFormat.getFormat("d-M-yyyy").format(new Date()).split("-")[1] 

For year - 
DateTimeFormat.getFormat("d-M-yyyy").format(new Date()).split("-")[2] 

Modifica- Allo stesso modo, evitare di utilizzare nuovo Data incongruenze (aa, mm, dd) è venuto a seconda del browser e la data gamma.

devo utilizzare una semplice classe DateUtil per creare e analizzare Data oggetti in GWT, forse di qualche utilità per voi -

(Attenzione: Molto greggio, e lavori in corso)

public class DateUtil 
{ 
    private static final String D_M_YYYY = "d-M-yyyy"; 
    private static final String DATE_SEPARATOR = "-"; 

    public static Date getDate(Integer dd, Integer mm, Integer yyyy) 
    { 
     if (dd == null || mm == null || yyyy == null) 
      return null; 

     Date retVal = null; 
     try 
     { 
      retVal = DateTimeFormat.getFormat(D_M_YYYY).parse(dd + DATE_SEPARATOR + mm + DATE_SEPARATOR + yyyy); 
     } 
     catch (Exception e) 
     { 
      retVal = null; 
     } 

     return retVal; 
    } 

    public static String getDayAsString(Date date) 
    { 
     return (date == null) ? null : DateTimeFormat.getFormat(D_M_YYYY).format(date).split(DATE_SEPARATOR)[0]; 
    } 

    public static String getMonthAsString(Date date) 
    { 
     return (date == null) ? null : DateTimeFormat.getFormat(D_M_YYYY).format(date).split(DATE_SEPARATOR)[1]; 
    } 

    public static String getYearAsString(Date date) 
    { 
     return (date == null) ? null : DateTimeFormat.getFormat(D_M_YYYY).format(date).split(DATE_SEPARATOR)[2]; 
    } 

    public static boolean isValidDate(Integer dd, Integer mm, Integer yyyy) 
    { 
     boolean isvalidDate = true; 

     try 
     { 
      String transformedInput = DateTimeFormat.getFormat(D_M_YYYY).format(getDate(dd, mm, yyyy)); 
      String originalInput = dd + DATE_SEPARATOR + mm + DATE_SEPARATOR + yyyy; 

      isvalidDate = transformedInput.equals(originalInput); 
     } 
     catch (Exception e) 
     { 
      isvalidDate = false; 
     } 

     return isvalidDate; 
    } 
} 
+0

Quali implementazioni di Data di terze parti raccomanderesti? – Jla

+0

Non ho aritmetica data complessa nella mia applicazione e quindi non ho seriamente cercato alcuna libreria DateTime per GWT. So che esiste un'utilità GwtDateTime (http://code.google.com/p/gwt-examples/wiki/gwtDateTime), ma non averlo testato, non può garantire per questo. YMMV –

+0

Questi non funzionano nei test unitari :((a meno che non si estenda GWTTestCase che è lento) –

2

si può solo aggiungere 1.900-getYear() valore di ritorno

1

I non credo che gwt supporterà Calendar in futuro, potrebbe essere in grado di supportare un'altra implementazione di manipolazione delle date. Quindi, poiché il consiglio di Java relativo all'utilizzo di Date non è valido in Gwt e non si ha alcuna altra opzione senza importare una libreria di terze parti, il modo corretto è utilizzare Data e ignorare gli avvisi di deprecazione.

+0

Ci sono alcuni casi limite che falliscono nei getter obsoleti di Date. Ci sono volute ore per individuare la fonte del bug di un metodo getDate() sulla data, s Ince quindi smesso di usare i metodi Date.Ti consiglio vivamente di testare accuratamente i tuoi metodi di data per l'intervallo di date previsto prima di distribuirli in produzione. –

24

La soluzione proposta da Ashwin funziona e non è così difficile. Ma suggerirei di utilizzare i modelli di data invece di suddividere:

For date - 
DateTimeFormat.getFormat("d").format(new Date()) 

For month - 
DateTimeFormat.getFormat("M").format(new Date()) 

For year - 
DateTimeFormat.getFormat("yyyy").format(new Date()) 
+1

Stavo pensando la stessa cosa. Perché fare il doppio del lavoro? –

Problemi correlati