2015-01-15 7 views
11

में एक ही तिथि पर कर रहे हैं मैं इस जैसे java.time से Instant वर्ग के दो उदाहरणों है:जांच करें कि "त्वरित" के दो उदाहरणों जावा 8

Instant instant1 = Instant.now(); 
Instant instant2 = Instant.now().plus(5, ChronoUnit.HOURS); 

अब मैं अगर दो उदाहरणों की जाँच करना चाहते हैं Instant वास्तव में एक ही तारीख (दिन, महीना और वर्ष मैच) पर हैं। आराम से मैंने सोचा, चलो बस चमकदार नया LocalDate और सार्वभौमिक from स्थिर विधि का उपयोग करें:

LocalDate localdate1 = LocalDate.from(instant1); 
LocalDate localdate2 = LocalDate.from(instant2); 

if (localdate1.equals(localdate2)) { 
    // All the awesome 
} 

कि सार्वभौमिक from विधि को छोड़कर तो सार्वभौमिक नहीं है और जावा एक अपवाद के साथ कार्यावधि में शिकायत:

java.time.DateTimeException: Unable to obtain LocalDate from TemporalAccessor: 2014-11-04T18:18:12Z of type java.time.Instant 

जो मुझे वर्ग 1 पर वापस छोड़ देता है।

Instant के दो उदाहरण वास्तव में एक ही तारीख है (उसी दिन, महीने, और हाँ आर)?

+0

दूसरे शब्दों में, आप कुछ है कि जावा 7 के साथ काम करता है? जावा 6 या जावा 5 के बारे में क्या? काम करने के लिए आपको कितनी जरूरत है? – markspace

+0

यह केवल मेरे मामले में जावा 8 के लिए काम करना है, शायद यह निर्दिष्ट किया जाना चाहिए कि – Robin

+0

'instant1.truncatedTo (ChronoUnit.DAYS) 'का उपयोग करने के बारे में कैसे? तत्काल 2 पर ऐसा करें और छंटनी वाले उदाहरणों की तुलना करें? – dcsohl

उत्तर

11

तत्काल वर्ग समय की मानव इकाइयों, जैसे वर्षों, महीनों या दिनों के साथ काम नहीं करता है। यदि आप उन इकाइयों में गणना करना चाहते हैं, तो आप तत्काल को ज़ोन के साथ बाध्यकारी करके लोकलडेटाइम या ज़ोनडेटडेटाइम जैसे किसी अन्य क्लाइंट में कनवर्ट कर सकते हैं। फिर आप वांछित इकाइयों में मूल्य का उपयोग कर सकते हैं।

http://docs.oracle.com/javase/tutorial/datetime/iso/instant.html

इसलिए मैं निम्नलिखित कोड का सुझाव:

LocalDate ld1 = LocalDateTime.ofInstant(instant1, ZoneId.systemDefault()).toLocalDate(); 
LocalDate ld2 = LocalDateTime.ofInstant(instant2, ZoneId.systemDefault()).toLocalDate(); 

if (ld1.isEqual(ld2)) { 
    System.out.println("blubb"); 
} 

वैकल्पिक रूप से आप इस्तेमाल कर सकते हैं

instant.atOffset(ZoneOffset.UTC).toLocalDate(); 
संबंधित मुद्दे