Je ne parviens pas à ajouter des secondes à l'horodatage Java.
J'ai ceci, mais ça me donne la même date:
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());
Le code que vous avez fonctionne pour moi. En tant que programme court mais complet:
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);
}
}
Sortie:
2011-11-07 10:27:45.302
2011-11-07 10:37:45.302
Notez la différence de 10 minutes, c’est-à-dire 600 secondes.
Bien sûr, vous perdez la précision inférieure à la milliseconde de cette façon, ce qui n’est peut-être pas idéal - et cela va à l’encontre de ce pour quoi j’utilise normalement un horodatage - mais il ajoute secondes ...
Une autre option serait d’utiliser Timestamp
directement:
Timestamp original = ...;
Timestamp later = new Timestamp(original.getTime() + (sec * 1000L));
later.setNanos(original.getNanos());
Je l'ai toujours favorisé la brièveté:
int sec = 600;
Timestamp later = new Timestamp(retry_date.getTime() + sec * 1000);
ou si vous voulez par rapport à « maintenant »:
Timestamp later = new Timestamp(System.currentTimeMillis() + sec * 1000);
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);
}
Dans Java 8 , vous pouvez utiliser le nouveau Java.time.Instant
. Dans Java.sql.TimeStamp
, deux nouvelles méthodes sont ajoutées à partir de Java 1.8 : public static Timestamp from(Instant instant)
et public Instant toInstant()
.
Donc, pour ajouter sec, nous pouvons convertir la TimeStamp
en Instant, puis appeler plusSeconds
puis de nouveau en 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);
Ou une ligne:
Timestamp ts_new_date_ws = TimeStamp.from(new Timestamp(retry_date).toInstant().plusSeconds(600))
Timestamp.from(dto.getTimeModified().toInstant().plusSeconds(600))