Timestamp 比较Java中的时间戳以获得天数差异
我正在从数据库中检索两个时间戳(签入和签出)。我需要比较这两个时间戳,找出两个时间戳之间经过了多少天。Timestamp 比较Java中的时间戳以获得天数差异,timestamp,Timestamp,我正在从数据库中检索两个时间戳(签入和签出)。我需要比较这两个时间戳,找出两个时间戳之间经过了多少天。 在Java中如何实现这一点?只需减去签出和签入,然后将所使用的任何单位转换为天。差不多 //pseudo-code diff_in_millis = Absolute Value Of ( check_out - check_in ) ; diff_in_days = diff_in_millis / (1000 * 60 * 60 * 24); 下面的代码片段也将给出天的差异 priva
在Java中如何实现这一点?只需减去签出和签入,然后将所使用的任何单位转换为天。差不多
//pseudo-code
diff_in_millis = Absolute Value Of ( check_out - check_in ) ;
diff_in_days = diff_in_millis / (1000 * 60 * 60 * 24);
下面的代码片段也将给出天的差异
private int getDaysBetween (Timestamp start, Timestamp end) {
boolean negative = false;
if (end.before(start)) {
negative = true;
Timestamp temp = start;
start = end;
end = temp;
}
GregorianCalendar cal = new GregorianCalendar();
cal.setTime(start);
cal.set(Calendar.HOUR_OF_DAY, 0);
cal.set(Calendar.MINUTE, 0);
cal.set(Calendar.SECOND, 0);
cal.set(Calendar.MILLISECOND, 0);
GregorianCalendar calEnd = new GregorianCalendar();
calEnd.setTime(end);
calEnd.set(Calendar.HOUR_OF_DAY, 0);
calEnd.set(Calendar.MINUTE, 0);
calEnd.set(Calendar.SECOND, 0);
calEnd.set(Calendar.MILLISECOND, 0);
if (cal.get(Calendar.YEAR) == calEnd.get(Calendar.YEAR)) {
if (negative)
return (calEnd.get(Calendar.DAY_OF_YEAR) - cal.get(Calendar.DAY_OF_YEAR)) * -1;
return calEnd.get(Calendar.DAY_OF_YEAR) - cal.get(Calendar.DAY_OF_YEAR);
}
int days = 0;
while (calEnd.after(cal)) {
cal.add (Calendar.DAY_OF_YEAR, 1);
days++;
}
if (negative)
return days * -1;
return days;
}
我按日期对我的集合myClassSet进行排序,如下所示:
private Set<MyClass> orderLocation(Set<MyClass> myClassSet) {
List<MyClass> elementList = new ArrayList<MyClass>();
elementList.addAll(myClassSet);
// Order by date
Collections.sort(elementList, this.comparatorElements);
Set<MyClass> l = new TreeSet<MyClass>(comparatorElements);
l.addAll(elementList);
return l;
}
private final Comparator<MyClass> comparatorElements = new Comparator<MyClass>() {
@Override
public int compare(MyClass element1, MyClass element2) {
long l1 = element1.getDate().getTime();
long l2 = element2.getDate().getTime();
if (l2 > l1)
return 1;
else if (l1 > l2)
return -1;
else
return 0;
}
};
private Set orderLocation(Set myClassSet){
List elementList=新建ArrayList();
elementList.addAll(myClassSet);
//按日期订购
Collections.sort(elementList,this.comparatorElements);
设置l=新树集(比较元素);
l、 addAll(元素列表);
返回l;
}
私有最终比较器comparatorElements=新比较器(){
@凌驾
公共整数比较(MyClass元素1,MyClass元素2){
长l1=element1.getDate().getTime();
long l2=element2.getDate().getTime();
如果(l2>l1)
返回1;
else if(l1>l2)
返回-1;
其他的
返回0;
}
};
如果这两个时间戳来自不同的主机,这让我有些头疼。日边界(12:00)上的几毫秒差异可能会导致不同的值。这可能并不总是达到您预期的效果,因为它会截断结果。由于Java 8,如果我们使用LocalDate、LocalDateTime来表示两个日期(有时间或没有时间),计算差异会更直观与Period和Duration结合使用:Timestamp date1=(Timestamp)mTab.getValue(“DateFrom”);LocalDate dateFrom=date1.toLocalDateTime().toLocalDate();Timestamp date2=(Timestamp)mTab.getValue(“DateTo”);LocalDate dateTo=date2.toLocalDateTime().toLocalDate();Period Period=Period.between(dateFrom,dateTo);int diff=period.getDays();
int frequency=0;
Calendar cal1 = new GregorianCalendar();
Calendar cal2 = new GregorianCalendar();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");
sdf.setTimeZone(TimeZone.getTimeZone("GMT"));
Date date = sdf.parse("2014-11-01 04:04:51.451975");
cal1.setTime(date);
date = sdf.parse("2015-11-30 04:04:51.451975");
cal2.setTime(date);
Date d1,d2;
d1=cal1.getTime();
d2=cal2.getTime();
frequency =(int)(TimeUnit.DAYS.convert(d2.getTime() - d1.getTime(), TimeUnit.MILLISECONDS));
System.out.println ("Days: " + frequency);