2011-11-07 21 views
10

मैं जावा टाइमस्टैम्प में सेकंड जोड़ने में विफल रहता हूं। मेरे लिए काम करता हैजावा: टाइमस्टैम्प में सेकंड कैसे जोड़ें?

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 सेकंड।

बेशक

आप उप millisecond परिशुद्धता इस तरह से है, जो अच्छी तरह से आदर्श नहीं हो सकता है खो देते हैं - और यह क्या मैं सामान्य रूप से पहले स्थान पर के लिए एक टाइमस्टैम्प का उपयोग कर रहा हूँ के खिलाफ जाता है - लेकिन यह सेकंड जोड़ देता है। ..

एक अन्य विकल्प बस सीधे 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

में जावा 8, आप नए java.time.Instant लाभ उठा सकते हैं। java.sql.TimeStamp में, जावा 1.8: public 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)) 
संबंधित मुद्दे