2011-11-07 38 views
10

Tôi không thêm giây vào Dấu thời gian Java.Java: Cách thêm giây vào Dấu thời gian?

Tôi có điều này, nhưng, nó mang lại cho tôi cùng ngày: tác phẩm

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

Trả lời

20

Mã này bạn đã có cho tôi. Là một chương trình ngắn nhưng đầy đủ:

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

Output:

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

Lưu ý sự khác biệt của 10 phút, nghĩa là 600 giây.

Tất nhiên bạn mất độ chính xác dưới miligiây theo cách này, điều này có thể không lý tưởng - và nó đi ngược lại với những gì tôi thường sử dụng dấu thời gian - nhưng nó thêm giây. ..

Một lựa chọn khác sẽ được chỉ cần sử dụng Timestamp trực tiếp: ngắn gọn

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

tôi luôn ủng hộ:

int sec = 600; 

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

hoặc nếu bạn muốn liên quan đến "bây giờ":

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

có thể xây dựng câu trả lời của bạn xin vui lòng? – kenorb

0

Trong java 8, bạn có thể tận dụng mới java.time.Instant. Trong java.sql.TimeStamp, hai phương thức mới được thêm từ java 1.8: public static Timestamp from(Instant instant)public Instant toInstant().

Vì vậy, để thêm chút, chúng tôi có thể chuyển đổi các TimeStamp Instant và sau đó gọi plusSeconds và sau đó trở lại dấu thời gian:

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

Hoặc một dòng:

Timestamp ts_new_date_ws = TimeStamp.from(new Timestamp(retry_date).toInstant().plusSeconds(600)) 
Các vấn đề liên quan