Java: Как добавить секунды к метке времени? - PullRequest
15 голосов
/ 07 ноября 2011

Я не могу добавить секунды к метке времени Java.

У меня есть это, но оно дает мне ту же дату:

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

Ответы [ 5 ]

27 голосов
/ 07 ноября 2011

Код, который у тебя есть, работает на меня.Как короткая, но полная программа:

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);
    }
}

Вывод:

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

Обратите внимание на разницу в 10 минут, т.е. 600 секунд.

Конечно, вы теряете сабвуферточность до миллисекунды, что может быть не идеальным - и это идет вразрез с тем, для чего я обычно использую временную метку - но это добавляет добавление секунд ...

Другой вариант - использовать Timestamp напрямую:

Timestamp original = ...;
Timestamp later = new Timestamp(original.getTime() + (sec * 1000L));
later.setNanos(original.getNanos());
15 голосов
/ 07 ноября 2011

Я всегда предпочитал краткость:

int sec = 600;

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

или, если хотите, относительно "сейчас":

Timestamp later = new Timestamp(System.currentTimeMillis() + sec * 1000);
3 голосов
/ 30 января 2013
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 голосов
/ 13 января 2017

В Java 8 , вы можете использовать новый java.time.Instant. В java.sql.TimeStamp добавлены два новых метода из Java 1.8 : public static Timestamp from(Instant instant) и public Instant toInstant().

Таким образом, чтобы добавить sec, мы можем преобразовать TimeStamp в Instant, затем вызвать plusSeconds, а затем вернуться к метке времени:

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

Или одна строка:

Timestamp ts_new_date_ws = TimeStamp.from(new Timestamp(retry_date).toInstant().plusSeconds(600))
0 голосов
/ 09 ноября 2016
Timestamp.from(dto.getTimeModified().toInstant().plusSeconds(600))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...