2011-11-07 24 views
10

Non riesco ad aggiungere secondi a Java Timestamp.Java: come aggiungere secondi a Timestamp?

ho questo, ma, mi dà la stessa data: opere

int sec = 600; 

java.sql.Timestamp ts_from_ws = new java.sql.Timestamp(retry_date); 
Calendar cal = Calendar.getInstance(); 
cal.setTimeInMillis(ts_from_ws.getTime()); 
cal.add(Calendar.SECOND,sec); 
java.sql.Timestamp ts_new_date_ws = new java.sql.Timestamp(cal.getTime().getTime()); 

risposta

20

Il codice che avete ottenuto per me. Come un breve ma completo programma:

import java.util.*; 
import java.sql.*; 

public class Test { 
    public static void main(String[] args) { 
     long retryDate = System.currentTimeMillis(); 

     int sec = 600; 

     Timestamp original = new Timestamp(retryDate); 
     Calendar cal = Calendar.getInstance(); 
     cal.setTimeInMillis(original.getTime()); 
     cal.add(Calendar.SECOND, sec); 
     Timestamp later = new Timestamp(cal.getTime().getTime()); 

     System.out.println(original); 
     System.out.println(later); 
    } 
} 

uscita:

2011-11-07 10:27:45.302 
2011-11-07 10:37:45.302 

Nota la differenza di 10 minuti, cioè 600 secondi.

Naturalmente si perde la precisione sub-millisecondo in questo modo, che non potrebbe essere l'ideale - e va contro quello che sto di solito uso un timestamp per in primo luogo - ma non aggiungono i secondi. ..

Un'altra opzione sarebbe quella di utilizzare solo Timestamp direttamente: brevità

Timestamp original = ...; 
Timestamp later = new Timestamp(original.getTime() + (sec * 1000L)); 
later.setNanos(original.getNanos()); 
12

ho sempre privilegiato:

int sec = 600; 

Timestamp later = new Timestamp(retry_date.getTime() + sec * 1000); 

o se si desidera relativi a "ora":

Timestamp later = new Timestamp(System.currentTimeMillis() + sec * 1000); 
3
public void addTimeBySecondsDemo(Date date,int sec){ 
    //int sec = 300; 
    System.out.println("Given date:"+date); 
    Calendar calender = Calendar.getInstance(); 
    calender.setTimeInMillis(date.getTime()); 
    calender.add(Calendar.SECOND, sec); 
    Date changeDate=calender.getTime(); 
    System.out.println("changeDate ..:"+changeDate);     
} 
0
Timestamp.from(dto.getTimeModified().toInstant().plusSeconds(600)) 
+0

Potrebbe elaborare la risposta per favore? – kenorb

0

In Java 8, è possibile sfruttare la nuova java.time.Instant. In java.sql.TimeStamp, vengono aggiunti due nuovi metodi da java 1.8: public static Timestamp from(Instant instant) e public Instant toInstant().

Quindi, per aggiungere sec, siamo in grado di convertire il TimeStamp al Immediata e quindi chiamare plusSeconds e poi di nuovo a TimeStamp:

Timestamp ts_from_ws = new Timestamp(retry_date); 
Instant next600Sec = ts_from_ws.toInstant().plusSeconds(600); 
Timestamp ts_new_date_ws = TimeStamp.from(next600Sec); 

O una riga:

Timestamp ts_new_date_ws = TimeStamp.from(new Timestamp(retry_date).toInstant().plusSeconds(600)) 
Problemi correlati