2009-04-08 32 views
205

Date.getTime() में "unixtime" हो रही है 1 जनवरी के बाद से रिटर्न मिलीसेकेंड, 1970 Unixtime मैं जावा में कोड आमतौर पर नहीं है 1 जनवरी 1970 के बाद से सेकंड है, लेकिन मैं कुछ बग फिक्स पर काम कर रहा हूँ। मेरे पास है:जावा

Date now = new Date();  
Long longTime = new Long(now.getTime()/1000); 
return longTime.intValue(); 

जावा में अनइंस्टटाइम पाने का कोई बेहतर तरीका है?

return (int) (System.currentTimeMillis()/1000L); 
+22

जब से तुम यह किसी पूर्णांक पर डाली रहे हैं, आप साल 2038 समस्या (यूनिक्स के लिए Y2K के बराबर) शुरू की है। यही वह समय है जब यूनिक्स युग 2 अरब हिट करता है और नकारात्मक हो जाता है। फिक्स 64-बिट यूनिक्स पर जाने के लिए है। जावा समकक्ष इसे लंबे समय तक छोड़ना है। –

+1

हां, मुझे इसके बारे में पता है। जिस कोड के साथ इंटरफेसिंग किया जा रहा है वह 32 बिट int की अपेक्षा करता है। –

+123

2038 जल्द ही आ रहा है। – Pacerier

उत्तर

385

दिनांक ऑब्जेक्ट निर्माण w/System.currentTimeMillis() से बचें:

अद्यतन

जॉन एम के सुझाव के आधार पर, मैं के साथ समाप्त हो गया। 1000 से विभाजित आपको यूनिक्स युग में ले जाता है।

जैसा कि एक टिप्पणी में उल्लिखित है, आप आम तौर पर यूनिक्सटाइम वैरिएबल के प्रकार के लिए बॉक्सिंग ऑब्जेक्ट लम्बी (पूंजी-एल लांग) नहीं बल्कि एक आदिम लंबी (लोअर-केस-एल लम्बाई) चाहते हैं।

long unixTime = System.currentTimeMillis()/1000L; 
+3

लंबे समय तक ऑटोबॉक्सिंग के बजाय आदिम लंबे समय तक उपयोग करने पर विचार करें, जब तक कि आप किसी ऑब्जेक्ट को किसी ऑब्जेक्ट (जैसे इसे संग्रह में रखना) को संभालना नहीं चाहते हैं, फिर से अनावश्यक ऑब्जेक्ट सृजन से बचाता है – Brabster

+0

यदि आप पूरी तरह से दिनांक का उपयोग करने से बच सकते हैं, तो आप बेहतर होंगे वैसे भी ... – Varkhan

+0

वास्तविक यूनिक्स टाइमस्टैम्प int, सही का उपयोग करके दर्शाया जाना चाहिए? – Zorayr

166

जावा 8 ने दिनांक और समय के साथ काम करने के लिए एक नया एपीआई जोड़ा। जावा 8 के साथ आप उपयोग कर सकते हैं

long unixTimestamp = Instant.now().getEpochSecond(); 

Instant.now() रिटर्न एक Instant कि मौजूदा सिस्टम का समय का प्रतिनिधित्व करता है। getEpochSecond() के साथ आपको Instant से युग सेकंड (यूनिक्स टाइम) मिलता है।

+17

यह नया स्वीकार्य उत्तर होना चाहिए। –

+1

'Instant.now()। GetEpochSecond()', 'new date()। GetTime()' और 'System.currentTimeMillis()' – SohamC

+1

के बीच क्या अंतर है एक अंतर यह है कि पूर्व सेकंड में है जबकि बाद के दो मिलीसेकंड में हैं। दूसरों को हो सकता है या नहीं भी हो सकता है। –