2010-07-08 31 views
17

Date değerinden gün, ay, yıl detaylarını almam gerekiyor, ancak getYear() kullanımdan kaldırılıyor, 2 haneli bir yıl veriyor ve Y2K ile ilgili sorunlar var (2008 verir 108). Java doc, java.util.calendar'u kullanmanızı önerir, ancak GWT'de desteklenmez.Get Date details (gün, ay, yıl) GWT

Sadece tarihlerle uğraşmak için sunucu ve istemci arasında tüm bilgileri göndermekten kaçınmak istiyorum.

Düzenleme: Calendar desteklenebilirTarih işleme fonksiyonları sürümleri futur GWT uygulanmalıdır: http://code.google.com/p/google-web-toolkit/issues/detail?id=603

cevap

19

olanlar kaldırılmış yöntemler üzerinde kullanmayın getYear() dönüş değerine 1900 ekleyebilir GWT'de tarih sınıfı.

Üçüncü taraf kullanmak istemiyorsanız GWT için tarih uygulamalarında, GWT, tarihleri ​​işlemek için biraz daha iyi bir destek gelene kadar, bir geçici çözüm olarak dize işlemi ile birlikte DateTimeFormat bir arada kullanın.

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] 

Edit- Benzer şekilde, yeni tarihi tarayıcı ve tarih aralığına bağlı (yy, aa, dd) geldi tutarsızlıkları kullanmaktan kaçının.

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

Hangi üçüncü taraf Tarih uygulamalarını önerirsiniz? – Jla

+0

Uygulamamda karmaşık tarih aritmetikleri yok ve bu nedenle GWT için herhangi bir DateTime kitaplığına ciddi olarak bakmadım. Bir GwtDateTime Yardımcı Programının (http://code.google.com/p/gwt-examples/wiki/gwtDateTime) olduğunu, ancak test edilmediğini biliyorum, bunun için ödeme yapamıyorum. YMMV –

+0

Bunlar, birim testlerinde çalışmaz :((GWTTestCase'i yavaşça uzatmazsanız) –

2

sadece

1

I:

(Çok kaba ve devam eden iş Uyarı) -

belki size bazı kullanım, GWT Tarih nesneleri oluşturmak ve ayrıştırmak için basit DateUtil Class kullanmasını sağlamak Gwt'nin gelecekte Takvimi destekleyeceğini düşünmeyin, başka bir tarih manipülasyon uygulamasını destekleyebilir. Bu nedenle, Tarih'i kullanma ile ilgili java tavsiyesi Gwt'de geçerli olmadığı için ve üçüncü taraf kitaplığı içe aktarmadan başka bir seçeneğiniz olmadığından, doğru yöntem Tarih'i kullanmak ve kullanımdan kaldırma uyarılarını dikkate almamaktır.

+0

Tarihin onaylanmamış alıcılarında başarısız birkaç kenar vakaları vardır. hata, tarihte bir getDate() yöntemine, s ince sonra Tarih yöntemleri kullanılarak durduruldu.Üretiminize başlamadan önce, tarih yöntemlerinizi beklenen tarih aralığı için iyice test etmenizi şiddetle tavsiye ederim. –

24

Ashwin tarafından sunulan çözüm işe yarıyor ve bu o kadar da zor değil. Ancak, tarih desenlerini bölme yerine kullanmanızı öneririm:

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

Aynı düşünceyi düşünüyordum. Neden işin iki katı? –

İlgili konular