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