2010-12-03 16 views
15

दिनांक प्राप्त करें जावा में वर्तमान सिस्टम समय से 4 घंटे कम की तारीख वस्तु कैसे वापस कर सकता हूं?4 घंटे पहले

उत्तर

51

सरल तरीके से एक:

Date date = new Date(System.currentTimeMillis() - (4 * 60 * 60 * 1000)); 

हालांकि यह नहीं DST (Daylight Saving Time) ध्यान में रखता है। एक वैकल्पिक Calendar है:

Calendar calendar = Calendar.getInstance(); 
calendar.add(Calendar.HOUR_OF_DAY, -4); 
Date date = calendar.getTime(); 

हालांकि यह एक बहुत बदसूरत एपीआई है। एक वैकल्पिक JodaTime है:

DateTime dateTime = new DateTime().minusHours(4); 
Date date = dateTime.toDate(); // If you ever need this... 
+1

यह डीएसटी खाते में क्यों नहीं लेता है? –

+2

पहला तरीका काम करता है, हालांकि मुझे लगता है कि यह कहना बेहतर है कि यह डीएसटी * टाइमज़ोन संक्रमण * खाते में नहीं लेता है। जोडाटाइम का उल्लेख करने के लिए +1। –

+4

@Thor: क्योंकि रनटाइम के दौरान आप पिछले 4 घंटों के दौरान 'System # currentTimeMillis() 'के आधार पर नहीं जानते हैं कि डीएसटी सक्षम/अक्षम किया गया है, तो आप परिणामस्वरूप समय बंद होने का जोखिम उठा सकते हैं। – BalusC

2

,, मिलीसेकंड करने के लिए इसे कन्वर्ट 4 घंटे में मिलीसेकेंड की संख्या घटाना इसे वापस कन्वर्ट एक तिथि करने के लिए।

6
Calendar calendar = Calendar.getInstance(); 
calendar.add(Calendar.HOUR_OF_DAY, -4); 
calendar.getTime(); 
+2

'कैलेंडर। आपका ~ 12 घंटे (एएम/पीएम) आधारित है, 24-घंटे आधारित नहीं है। आप 'कैलेंडर। HOUR_OF_DAY' चाहते हैं। साथ ही, 'कैलेंडर # getInstance() 'फैक्ट्री का उपयोग करके क्षेत्र-विशिष्ट कैलेंडर मैन्युअल रूप से निर्माण करने पर प्राथमिकता दी जाती है। – BalusC

+0

@ बालससी: ठीक किया गया। –

1
Calendar c =Calendar.getInstance() ; 
c.add(Calendar.HOUR,-4); 
Date d = c.getTime(); 
+0

इस मामले में, रोल रोल करने के लिए बेहतर है। – Avrom

+0

रोल विधि केवल 4:00 (पूर्वाह्न) और 23:59 के बीच काम करती है। अन्यथा आपको एक गलत दिन मिल जाएगा। – Robert

2
Calendar c = Calendar.getInstance(); 
c.add(Calendar.HOUR_OF_DAY, -4); 
java.util.Date d = c.getTime(); 
System.out.println(d); 
3

अन्य उत्तर सही हैं, लेकिन मैं आधुनिक जवाब योगदान करना चाहते हैं। आधुनिक समाधान java.time, आधुनिक जावा दिनांक और समय API का उपयोग करता है।

Instant fourHoursAgo = Instant.now().minus(Duration.ofHours(4)); 
System.out.println(fourHoursAgo); 

यह सिर्फ मुद्रित:

2018-01-31T15:22:21.113710Z 

Z अंत में पता चलता है कि समय UTC में छापा जाता है - यूटीसी शून्य ऑफसेट पर अगर आप करेंगे। Instant कक्षा Date के लिए आधुनिक प्रतिस्थापन है, इसलिए मैं आपको इसके साथ चिपकने की सलाह देता हूं। आधुनिक एपीआई आमतौर पर काम करने के लिए इतना अच्छा है, इतना साफ, इतना बेहतर डिजाइन किया गया है।

कृपया ध्यान दें पुस्तकालय वर्ग दे के फायदे के लिए 4 घंटे की घटाव कार्य करें: कोड को पढ़ने के लिए स्पष्ट और त्रुटि-रहित होता है। कोई मज़ेदार स्थिरांक नहीं, और कोई पाठक यह जांचने के लिए समय नहीं लेता कि वे सही हैं या नहीं।

आप, एक पुराने ढंग Date वस्तु की जरूरत है, उदाहरण के लिए जब एक विरासत एपीआई है कि आप बदल नहीं सकते या बदलने के लिए नहीं करना चाहते, इस तरह परिवर्तित का उपयोग कर हैं:

Date oldfashionedDate = Date.from(fourHoursAgo); 

लिंक:Oracle Tutorial trail: Date Time। बेशक इंटरनेट पर अन्य संसाधन भी हैं, कृपया खोजें।

+0

अगली बार डुप्लिकेट उत्तरों पोस्ट करने के बजाय सिर्फ डुप्ली के रूप में बंद करने के लिए वोट दें। – BalusC

+0

अपना पॉइंट देखें, @ बाल्लूसी। अगर मैंने उन्हें सही डुप्लिकेट माना होगा (मेरे दो उत्तरों के बीच एक पर्याप्त ओवरलैप है, लेकिन वे समान नहीं हैं)। –

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