簡體   English   中英

Spring JPQL 獲取日期時間之間的行

[英]Spring JPQL get rows between date time

我正在嘗試從數據庫中獲取記錄,我使用 java.util.date 和 java.util.calendar 來檢索從現在開始前 5 分鍾內插入的記錄我使用 java.util 日歷計算時間間隔但是當兩個日期開始和結束時已解析,我無法在我正在尋找的時間跨度中找到行,有什么建議可以解決這個問題嗎?

    Date d = new Date();
    Calendar cal = Calendar.getInstance();
    cal.setTime(d);
    cal.add(Calendar.MINUTE, -5);
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss.SSS");
    // SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
    d = cal.getTime();
    String stdate = sdf.format(d);
    //System.out.println("start date" + stdate);        
    // process end date     
    Date dd = new Date();
    Calendar call = Calendar.getInstance();
    call.setTime(dd);
    call.add(Calendar.MINUTE, -0);      
    dd = call.getTime();
    String eddate = sdf.format(dd);
    SimpleDateFormat sdft=new SimpleDateFormat("yyyyMMddHHmmssSSS");
    //SimpleDateFormat sdft=new SimpleDateFormat("yyyyMMdd");
    String stabledate=sdf.format(new Date());       
    
     List<customers> listofcustomers= customerepo.findAllByTscsstatusAndDateBetween("ACTIVE",sdf.parse(startdate),sdf.parse(enddate));e here

tl;博士

myPreparedStatement.setObject( 
    … 
    , 
    OffsetDateTime
    .now( ZoneOffset.UTC ) 
    .minusMinutes( 5 )
) 

避免遺留日期時間類

DateCalendar類多年前被 JSR 310 中定義的現代java.time類所取代。

java.時間

捕捉當下。

Instant instant = Instant.now() ;

確定五分鍾前的時刻。

Duration d = Duration.ofMinutes( 5 ) ;
Instant fiveMinutesAgo = instant.minus( d ) ;

您的數據庫列的類型必須類似於 SQL 標准類型TIMESTAMP WITH TIME ZONE

轉換我們的Instant object 以與 SQL 一起使用。

OffsetDateTime odt = fiveMinutesAgo.atOffset( ZoneOffset.UTC ) ;

像這樣寫 SQL:

SELECT * 
FROM event_ 
WHERE when_ !< ?
;

通過我們的OffsetDateTime object 來填充占位符。

myPreparedStatement.setObject( 1 , odt ) ;

恢復。

OffsetDateTime odt = myResultSet.getObject( … , OffsetDateTime.class ) ;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM