2010-07-08 13 views
17

Ich brauche den Tag zu bekommen, Monat, Jahr Details aus einem Date Wert aber getYear() ist veraltet, Jahr auf 2 Stellen gibt, und haben Probleme mit Y2K (2008 ergibt 108). Das Java-Dokument empfiehlt die Verwendung von java.util.calendar, aber es wird nicht in GWT unterstützt.Get Datum Details (Tag, Monat, Jahr) in GWT

Ich möchte vermeiden, dass alle Informationen hin und her zwischen dem Server und dem Client gesendet werden, nur um mit Daten umzugehen.

Edit: Calendar könnteDatum Handling-Funktionen unterstützt werden sollte in GWT futur Versionen implementiert werden: http://code.google.com/p/google-web-toolkit/issues/detail?id=603

Antwort

19

Sie diese veralteten Methoden nicht verwenden Datumsklasse in GWT.

Wenn Sie keine Date Implementierungen von Drittanbietern für GWT verwenden möchten, verwenden Sie eine Kombination von mit String-Manipulation als Workaround vorerst, bis GWT eine bessere Unterstützung für das Bearbeiten von Daten bietet.

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] 

Bearbeiten- Ebenso vermeidet neues Datum mit (yy, mm, dd) hat sich Inkonsistenzen auf dem Browser und Datumsbereich abhängig.

Ich habe eine einfache dateutil Klasse verwenden, um Date-Objekte in GWT zu erstellen und zu analysieren, vielleicht von Nutzen zu Ihnen -

(Achtung: Sehr grob, und unfertige)

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

Welche Drittanbieter-Implementierungen würden Sie empfehlen? – Jla

+0

Ich habe keine komplexe Datumsarithmetik in meiner Anwendung und habe daher nicht ernsthaft nach einer DateTime-Bibliothek für GWT gesucht. Ich weiß, dass es ein GwtDateTime-Dienstprogramm gibt (http://code.google.com/p/gwt-examples/wiki/gwtDateTime), das aber nicht getestet wurde, kann nicht dafür bürgen. YMMV –

+0

Diese funktionieren nicht in Komponententests :((außer Sie erweitern GWTTestCase, die langsam ist) –

2

Sie können nur hinzufügen 1900-getYear() Rückgabewert

1

I Glauben Sie nicht, dass gwt den Kalender in Zukunft unterstützen wird, könnte es eine andere Implementierung der Datumsmanipulation unterstützen. Da die Java-Empfehlung, Date nicht zu verwenden, in Gwt nicht gültig ist und Sie keine andere Option haben, ohne eine Bibliothek eines Drittanbieters zu importieren, ist der richtige Weg, Date zu verwenden und veraltete Warnungen zu ignorieren.

+0

Es gibt ein paar Randfälle, die in den veralteten Getter von Date fehlschlagen. Es dauerte Stunden, um die Quelle zu finden des Fehlers zu einer Methode getDate() am Datum, s Ince hat dann aufgehört, Date-Methoden zu verwenden.Ich rate Ihnen dringend, Ihre Terminmethoden vor dem Einsatz in der Produktion gründlich auf den erwarteten Zeitraum zu testen. –

24

Der Workaround von Ashwin funktioniert und es ist nicht so schwierig. Aber ich würde vorschlagen, die Datumsmuster zu verwenden, anstatt zu teilen:

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

Ich dachte das gleiche denken. Warum zweimal die Arbeit machen? –

Verwandte Themen