2013-02-12 129 views
3

我有一個Timestamp和Date變量,我想比較它是否相等(當然只有日期部分)。這是驚喜,我構造器日期(長)可以節省一部分時間,所以這段代碼不起作用正確:將java.sql.Timestamp轉換爲java.sql.Date

date = resultSet.getDate(1); 
timestamp = resultSet.getTimestamp(2);  
//... 
if (date.equals(new Date (timestamp.getTime())) ... 

我解決這個問題有類似的代碼:

DateFormat dateFormat = new SimpleDateFormat ("yyyyMMdd"); 
if (date.equals(dateFormat.parse(dateFormat.format(timestamp)))) ... 

或者我可以時間戳轉換爲日期在SQL查詢,但我也需要一個時間戳表示。是否有更好的方法從Timestamp中剪切時間部分。

回答

3

使用the method from this answer我們得到:

date = resultSet.getDate(1); 
timestamp = resultSet.getTimestamp(2);  
Calendar cal1 = Calendar.getInstance(); 
Calendar cal2 = Calendar.getInstance(); 
cal1.setTime(date); 
cal2.setTimeInMillis(timestamp.getTime()); 
boolean sameDay = cal1.get(Calendar.YEAR) == cal2.get(Calendar.YEAR) && 
        cal1.get(Calendar.DAY_OF_YEAR) == cal2.get(Calendar.DAY_OF_YEAR); 

這是值得一讀的鏈接的答案,因爲它與尊重談到這個方法的缺點,時區等(和其他一些回答這個問題的給備用你可能更喜歡的方法)。

2

爪哇8的轉換的方法:

Date date = Date.valueOf(timestamp.toLocalDateTime().toLocalDate()); 

反之亦然:

Timestamp timestamp = Timestamp.valueOf(date.toLocalDate().atStartOfDay()); 
0

另一種方法是使用曆元值的 「日」 部分:

Date d = new Date(); 
Timestamp t = new Timestamp(d.getTime()); 

long dateEpochDays = d.getTime() % (1000*60*60*24); 
long timeStampEpochDays = t.getTime() %(1000*60*60*24); 

System.out.println("date: " + dateEpochDays + " timestamp: " + timeStampEpochDays); 
相關問題