2016-11-11 199 views
-2

问题是:我使用的标准从我的数据库中获取“startDate”和“endDate”的最大值。现在我必须找到数据库时间戳中这两个对象之间的区别。计算两个时间戳对象之间的差异java

有谁知道该怎么办?

taskTimes.java

public Object taskTimes() { 
     Session session = sessionFactory.openSession(); 
     session.beginTransaction(); 
     Criteria criteria = session.createCriteria(Task.class).setProjection(Projections.max("endDate")); 
     Object avgDate = (Object) criteria.uniqueResult(); 

     Criteria criteria1 = session.createCriteria(Task.class).setProjection(Projections.max("startDate")); 
     Object avgDate1 = (Object) criteria1.uniqueResult(); 
     System.out.println(avgDate); 
     System.out.println(avgDate1); 
     session.close(); 

     return avgDate; 
    } 

Task.java

@Entity 
public class Task { 

    @Id 
    @GeneratedValue(strategy = GenerationType.AUTO) 
    private Long id; 

    @Column(nullable = false) 
    private int batch; 

    @Column 
    private java.sql.Timestamp startDate; 

    @Column 
    private java.sql.Timestamp endDate; 

    @ManyToOne 
    private Student student; 

    @ManyToOne 
    private Job job; 

    @OneToMany(mappedBy="task") 
    private List<Result> results; 

    public Long getId() { 
     return id; 
    } 

    public void setId(Long id) { 
     this.id = id; 
    } 

    public Student getStudent() { 
     return student; 
    } 

    public void setStudent(Student student) { 
     this.student = student; 
    } 

    public Job getJob() { 
     return job; 
    } 

    public void setJob(Job job) { 
     this.job = job; 
    } 

    public List<Result> getResults() { 
     return results; 
    } 

    public void setResults(List<Result> results) { 
     this.results = results; 
    } 

    public Task(Long id, int batch, Timestamp startDate, Timestamp endDate, Student student, Job job, 
      List<Result> results) { 
     super(); 
     this.id = id; 
     this.batch = batch; 
     this.startDate = startDate; 
     this.endDate = endDate; 
     this.student = student; 
     this.job = job; 
     this.results = results; 
    } 

    public java.sql.Timestamp getStartDate() { 
     return startDate; 
    } 

    public void setStartDate(java.sql.Timestamp startDate) { 
     this.startDate = startDate; 
    } 

    public java.sql.Timestamp getEndDate() { 
     return endDate; 
    } 

    public void setEndDate(java.sql.Timestamp endDate) { 
     this.endDate = endDate; 
    } 

    public Task() { 

    } 

    public int getBatch() { 
     return batch; 
    } 

    public void setBatch(int batch) { 
     this.batch = batch; 
    } 

    @Override 
    public String toString() { 
     return "Task [id=" + id; 
    } 
+1

'java.sql.Timestamp'继承自'java.util.Date'。计算两个Date对象之间的差异很简单。我建议你回去阅读Javadoc。 –

+0

我无法从时间戳转换为日期 –

+0

您可能无法从时间戳转换为java.util.Date,但应该可以从时间戳转换为java.sql.Date。 –

回答

0

java.sql.Timestamp的API它提供了一个方法的getTime()。

返回此Timestamp对象表示的自1970年1月1日00:00:00 GMT以来的毫秒数。

要计算差异,您可以结合使用此方法和Math.abs

0

如果对象是TIMESTAMP类型,类型转换他们时间戳

Timestamp avgDateTs = (Timestamp)avgDate; 
Timestamp avgDateTs1 = (Timestamp)avgDate1; 

然后获得以毫秒为单位的时间。

long timeInMills = avgDateTs.getTime(); 
long timeInMills1 = avgDateTs1.getTime(); 

做一个毫秒值的差异,那会给你以毫秒为单位的差异。

然后,您可以除以1000以秒为单位获得差异。

long differenceInSecs = (timeInMills1-timeInMills)/1000; 
相关问题