Java: как добавить секунды к отметке времени?
Я не могу добавить секунды в Java Timestamp.
У меня это есть, но это дает мне ту же дату:
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());
Ответы
Ответ 1
Код, который у вас есть, работает для меня. В качестве короткой, но полной программы:
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());
Ответ 2
Я всегда выступал за краткость:
int sec = 600;
Timestamp later = new Timestamp(retry_date.getTime() + sec * 1000);
или если вы хотите относиться к "сейчас":
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);
}
Ответ 4
Timestamp.from(dto.getTimeModified().toInstant().plusSeconds(600))
Ответ 5
В 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:
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))