web-dev-qa-db-fra.com

Java: Comment ajouter des secondes à l'horodatage?

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());
11
user63898

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());
24
Jon Skeet

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);
13
Bohemian
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);                
}
3
Knowledge Serve

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))
0
Leon li
Timestamp.from(dto.getTimeModified().toInstant().plusSeconds(600))
0