2012-05-14 14 views
10

मैं टाइमस्टैम्प डेटा प्रकार के रूप में एक PostgreSQL डेटाबेस में एक java.sql.Timestamp की दुकान और मैं वर्तमान टाइमस्टैम्प को डीबी में संग्रहीत एक से मिनट या घंटे में अंतर पता लगाना चाहते हैं। ऐसा करने का सबसे अच्छा तरीका क्या है? क्या इसके लिए विधियों में बनाया गया है या क्या मुझे इसे लंबे या कुछ में परिवर्तित करना है?2 java.sql.Timestamps के बीच घंटा या मिनट अंतर खोजें?

+0

के संभावित डुप्लिकेट [कैसे दो जावा java.sql.Timestamps के बीच अंतर की गणना करने के?] (Http://stackoverflow.com/questions/582278/how-to-calculate-the-difference-between- दो-जावा-जावा-एसक्यूएल-टाइमस्टैम्प) –

उत्तर

17

मैंने इसका उपयोग समाप्त कर दिया, अगर वे इसे खोजते हैं तो इसे दूसरों के लिए पोस्ट करना चाहते हैं।

public static long compareTwoTimeStamps(java.sql.Timestamp currentTime, java.sql.Timestamp oldTime) 
{ 
    long milliseconds1 = oldTime.getTime(); 
    long milliseconds2 = currentTime.getTime(); 

    long diff = milliseconds2 - milliseconds1; 
    long diffSeconds = diff/1000; 
    long diffMinutes = diff/(60 * 1000); 
    long diffHours = diff/(60 * 60 * 1000); 
    long diffDays = diff/(24 * 60 * 60 * 1000); 

    return diffMinutes; 
} 
+0

आप सबसे अच्छे हैं! – dbrad

0

DATETIME को घंटे, मिनट और सेकंड में मान में परिवर्तित करने के लिए UNIX_TIMESTAMP फ़ंक्शन का उपयोग करें।
और यदि आप सुनिश्चित नहीं हैं कि कौन सा मान बड़ा है तो एबीएस फ़ंक्शन का उपयोग करें। "क्षेत्र" के लिए

public static Date addRemoveAmountsFromDate(Date date, int field, int amount) { 
    Calendar tempCalendar = Calendar.getInstance(); 

    tempCalendar.setTime(date); 
    tempCalendar.add(field, amount); 

    return tempCalendar.getTime(); 
} 

उदाहरण:

1

तारीख ऐड के लिए/यह मेरा सामान्य कार्य है निकाल Calendar.HOUR_OF_DAY, Calendar.MINUTE

1

बस का उपयोग करें:

Date.compareTo(Date) 

आप java.sql.Timestamps को पहले दिनांक में कनवर्ट करना होगा।

+0

ओपी अब तक घंटों और मिनटों के रूप में समय बीतना चाहता है, लेकिन यदि तारीखें पहले या बाद में बराबर नहीं हैं। –

+0

इस उत्तर के प्रश्न के साथ कुछ भी नहीं है –

0

date_part फ़ंक्शन आपको hours दे सकता है या जैसा कि ब्याज हो सकता है, लेकिन यह substr का एक प्रकार है और इसलिए इस पर भरोसा नहीं किया जा सकता है। आपको timestamp वैल्यू को unix_timestamp और extractकुल घंटे 0 मिनट, मिनट या timestamp से current_timestamp तक सीमित होने की आवश्यकता है।

उदाहरण:

select age(now(), timestamp '2010-11-12 13:14:15'); 
//results the interval to be "*1 year 6 mons 2 days 04:39:36.093*" 

select date_part('hours', age(now(), timestamp '2010-03-10 02:03:04')); 
// results *4* which is not correct. 

घंटे या दूसरों का सही मूल्य 1970 के बाद से बीते सेकंड यह extract समारोह के साथ epoch का उपयोग कर प्राप्त किया जा सकता की कुल संख्या पाने के बाद की गणना की जा सकती है।
epoch1970-01-01 00:00:00-00 के बाद से सेकंड की कुल संख्या देता है। और, आप जानते हैं, हम इसे घंटे में 3600.

epoch का उपयोग के साथ विभाजित करके परिवर्तित कर सकते हैं extract साथ:

select 
    EXTRACT(EPOCH FROM current_timestamp - timestamp '2010-11-12 13:14:15') as total_seconds, 
    EXTRACT(EPOCH FROM current_timestamp - timestamp '2010-11-12 13:14:15')/3600 as total_hours; 
    ROUND( 
     EXTRACT(EPOCH FROM current_timestamp - timestamp '2010-11-12 13:14:15')/3600 
     ) as total_hours_rounded; 

// परिणाम:

----------------+--------------+----------------------- 
| total_seconds | total_hours | total_hours_rounded | 
| --------------+--------------+----------------------| 
| 47452282.218 | 13181.189505 | 13181    | 
----------------+--------------+----------------------- 

इसी तरह, हम कर सकते हैं अन्य आवश्यक मूल्य निकालें और आवश्यकतानुसार उपयोग करें।

संबंधित मुद्दे