2011-11-07 140 views
10

我無法將時間秒添加到Java時間戳。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()); 

回答

20

的代碼你得爲我工作。作爲短但完整的程序:

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

我一直偏愛簡潔:

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);     
} 
0
Timestamp.from(dto.getTimeModified().toInstant().plusSeconds(600)) 
+0

你能否詳細說明你的答案好嗎? – kenorb

0

的Java 8,您可以利用新的java.time.Instant。在java.sql.TimeStamp中,從java 1.8public static Timestamp from(Instant instant)public Instant toInstant()增加了兩種新方法。

所以要加秒,我們可以TimeStamp轉換爲即時,然後調用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)) 
相關問題