2016-11-11 5 views
-2

Das Problem ist: Ich habe Kriterien verwendet, um aus meiner Datenbank den Maximalwert von "StartDate" und "EndDate" zu nehmen. Jetzt muss ich den Unterschied zwischen diesen beiden Objekten finden, die sich im Zeitstempel der Datenbank befinden.Berechnen Sie den Unterschied zwischen zwei Timestamp-Objekten java

Weiß jemand, wie man vorgeht?

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' erbt von' java.util.Date'. Die Berechnung der Differenz zwischen zwei "Date" -Objekten ist einfach. Ich schlage vor, Sie gehen zurück und lesen den Javadoc. –

+0

Ich kann nicht vom Zeitstempel zum Datum –

+0

umwandeln Sie können möglicherweise nicht von Timestamp in java.util.Date umwandeln, aber Sie sollten in der Lage sein, von Timestamp in java.sql.Date zu konvertieren. –

Antwort

0

nach API von java.sql.Timestamp bietet sie ein Verfahren getTime().

Gibt die Anzahl der Millisekunden seit dem 1. Januar 1970 00:00:00 GMT zurück, die von diesem Timestamp-Objekt dargestellt werden.

Um den Unterschied zu berechnen, können Sie eine Kombination dieser Methode und Math.abs verwenden.

0

Wenn die Objekte vom Typ Timestamp sind, typisieren sie

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

Dann die Zeit in Millisekunden zeitzustempeln erhalten.

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

Führen Sie einen Diff der Millisekundenwerte durch, die den Unterschied in Millisekunden ergeben würden.

Sie können dann durch 1000 teilen, um die Differenz in Sekunden zu erhalten.

long differenceInSecs = (timeInMills1-timeInMills)/1000; 
Verwandte Themen