2017-11-15 15 views
5

Joda में, हम2 के बीच जावा साल instants

Years.between(dateTime1, dateTime2); 

कोई आसान तरीका ज्यादा तर्क के बिना बजाय java.time एपीआई का उपयोग कर 2 instants के बीच के वर्षों को खोजने के लिए है का उपयोग कर 2 Datetime के बीच के वर्षों की गणना कर सकते हैं?

ChronoUnit.YEARS.between(instant1, instant2) 

विफल रहता है:

Exception in thread "main" java.time.temporal.UnsupportedTemporalTypeException: Unsupported unit: Years 
     at java.time.Instant.until(Instant.java:1157) 
     at java.time.temporal.ChronoUnit.between(ChronoUnit.java:272) 
     ... 
+0

'इंस्टेंस 1' किस प्रकार का है? –

+0

बस अपडेट किया गया। यह जावा है.टाइम है। तत्काल। – user1578872

+0

संभावित डुप्लिकेट [मैं एंड्रॉइड में दो तिथियों के बीच वर्षों की संख्या कैसे प्राप्त कर सकता हूं?] (Https://stackoverflow.com/questions/7906301/how-can-i-find-the-number-of-years-between -two-date-in-android) –

उत्तर

7

दो instants के बीच वर्षों की संख्या undefined माना जाता है (जाहिरा तौर पर - मैं इस से आश्चर्यचकित था), लेकिन आप आसानी ZonedDateTime में instants बदलने और एक उपयोगी परिणाम प्राप्त कर सकते हैं:

Instant now = Instant.now(); 
Instant ago = Instant.ofEpochSecond(1234567890L); 

System.out.println(ChronoUnit.YEARS.between(
    ago.atZone(ZoneId.systemDefault()), 
    now.atZone(ZoneId.systemDefault()))); 

प्रिंटों:

8 

I संदिग्ध कारण आप सीधे प्रतिभागियों की तुलना नहीं कर सकते हैं क्योंकि वर्ष सीमा का स्थान समय क्षेत्र पर निर्भर करता है। इसका मतलब है कि ZoneId.systemDefault() आप जो चाहते हैं वह नहीं हो सकता है! ZoneOffset.UTC एक उचित विकल्प होगा, अन्यथा यदि कोई समय क्षेत्र है जो आपके संदर्भ में अधिक अर्थपूर्ण है (उदाहरण के लिए उपयोगकर्ता का समय क्षेत्र जो परिणाम देखेंगे) तो आप इसका उपयोग करना चाहेंगे।

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