将java.sql.Timestamp转换为java.sql.Date

问题描述:

我有一个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中剪切时间部分。

这个有三个选项。

首先是使用尤达时间和类DateTimeComparator.getDateOnlyInstance()

二是利用公共资源从Apache和DateUtils.isSameDay()

三使用[日历]并设定时间和比较的年,月,年的一天只要。正如戴夫韦伯提出的。

使用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); 

这是值得一读的链接的答案,因为它与尊重谈到这个方法的缺点,时区等(和其他一些回答这个问题的给备用你可能更喜欢的方法)。

爪哇8的转换的方法:

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

反之亦然:

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

另一种方法是使用历元值的 “日” 部分:

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);