2012-01-23 20 views
7

Veritabanında zaman damgası var ve uygulamada tarih var. Hazırda bekletme ölçütlerini, hazırda bekletme zamanının değil tarihle eşleşen tüm girişleri çekebileceği şekilde yazmayı seviyorum. , ör. DB damgasıKarşıdaki tarih bölümüyle yalnızca Hazırda Beklemede olan Timestamp ile karşılaştırın

2011-12-01 15:14:14

ve uygulamada

i varsayılan zaman bölümü tarafından sahip java.util.Date var. i kodunu aşağıdaki ile veritabanından girdileri ararken

benim sorunum ben hiçbir şey önceden

cevap

12

(örn bugünden yarına kadar). o şekilde kullanın:

YourService.java

Date fromTimestamp = new Date(); 
Date toTimestamp = new Date(); 
Date fromDate = DateHelper.getDateWithoutTime(fromTimestamp); 
Date toDate = DateHelper.getDateWithoutTime(DateHelper.getTomorrowDate(toTimestamp)); 

YourDAO.java

criteria.add(Restrictions.ge(TIMESTAMP_FIELD, fromDate)); 
criteria.add(Restrictions.le(TIMESTAMP_FIELD, toDate)); 

DateHelper.java

public static Date getDateWithoutTime(Date date) { 
    Calendar cal = Calendar.getInstance(); 
    cal.setTime(date); 
    cal.set(Calendar.HOUR_OF_DAY, 0); 
    cal.set(Calendar.MINUTE, 0); 
    cal.set(Calendar.SECOND, 0); 
    cal.set(Calendar.MILLISECOND, 0); 
    return cal.getTime(); 
} 

public static Date getTomorrowDate(Date date) { 
    Calendar cal = Calendar.getInstance(); 
    cal.setTime(date); 
    cal.add(Calendar.DATE, 1); 
    return cal.getTime(); 
} 

Ve tabii ki - uzay için her zaman vardır her kodda geri çekiliyor.

4

yılında

DetachedCriteria criteria = DetachedCriteria.forClass(MyClass.class); 
    criteria.add(Restrictions.like(TIMESTAMP_FIELD, javaUtilDate)); 
    List entries =this.getHibernateTemplate().findByCriteria(criteria); 

sayesinde benzeri operatörü yalnızca dize değerleri üzerinde kullanılabilir olsun. Bir tarihte mantıklı değil.

tarih varsa 2011-12-01 (burada yyyy-MM-dd varsayarak) ve o zaman damgası >= 2011-12-01 ve < 2011-12-02 tüm satırlar için aradığınız, bu güne kendi zaman damgası tüm satırları istiyorum.

Yani, (geçici Takvim nesnesi kullanarak) bugüne kadar 1 gün ekleyin ve aşağıdaki kodu kullanın: Eğer tarih aralığında tarafından bir filtreleme genel kullanım arıyorsanız

criteria.add(Restrictions.ge(TIMESTAMP_FIELD, javaUtilDate)); 
criteria.add(Restrictions.lt(TIMESTAMP_FIELD, javaUtilDatePlusOneDay)); 
+0

Eğer tarihi dize dönüştürürsem, o zaman bana 2011-12-11 02:00:00 'gösterir ve eğer bir gün çıkarırsam veya eklediğimde, sorgulamam makul sonuçlar almaz. bu sayede, zaman bölümünden dolayı belirtilen günlerden önce bu yalanları alacağım. – Rehman

+0

Uygun tarih sınırlarını kullanın. Tüm zaman alanlarını (saat, dakika, saniye, milisaniye) 0 olarak ayarlayın. Bu, alt sınırı oluşturur. Bir gün ekle. Bu üst sınırı yapar. –

1
if (model.getFromDOE() != null) { 
     criteria.add(Restrictions.ge("createdDate", 
       getFormattedFromDateTime(model.getFromDOE()))); 
    } 

    if (model.getToDOE() != null) { 
     criteria.add(Restrictions.le("createdDate", 
       getFormattedToDateTime(model.getToDOE()))); 
    } 

private Date getFormattedFromDateTime(Date date) { 
    Calendar cal = Calendar.getInstance(); 
    cal.setTime(date); 
    cal.set(Calendar.HOUR_OF_DAY, 0); 
    cal.set(Calendar.MINUTE, 0); 
    cal.set(Calendar.SECOND, 0); 
    return cal.getTime(); 
} 

private Date getFormattedToDateTime(Date date) { 
    Calendar cal = Calendar.getInstance(); 
    cal.setTime(date); 
    cal.set(Calendar.HOUR_OF_DAY, 23); 
    cal.set(Calendar.MINUTE, 59); 
    cal.set(Calendar.SECOND, 59); 
    return cal.getTime(); 
} 
İlgili konular