2016-11-11 8 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 очень просто. Я предлагаю вам вернуться и прочитать Джавадока. –

+0

Я не могу отбрасывать из timestamp в Date –

+0

Возможно, вы не сможете отбрасывать из Timestamp в java.util.Date, но вы должны уметь отбрасывать из Timestamp в java.sql.Date. –

ответ

0

В соответствии с API из java.sql.Timestamp он предлагает метод GetTime().

Возвращает количество миллисекунд с 1 января 1970 года, 00:00:00 GMT, представленное этим объектом Timestamp.

Чтобы рассчитать разницу, вы можете использовать комбинацию этого метода и Math.abs.

0

Если объекты типа Timestamp, типаж их TIMESTAMP

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

Затем получить время в миллисекундах.

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

Выполните диф значений миллисекунды, что даст вам разницу в миллисекундах.

Затем вы можете разделить на 1000, чтобы получить разницу в секундах.

long differenceInSecs = (timeInMills1-timeInMills)/1000; 

 Смежные вопросы

  • Нет связанных вопросов^_^