2014-10-10 17 views
5

मैं एक ईवेंट तक समय दिखाते हुए एक स्ट्रिंग वापस करने के लिए एक अवधिफॉर्मेटर का उपयोग कर रहा हूं। नीचे दिया गया कोड x दिन y घंटे z मिनट के बजाय 1146 घंटे 39 मिनट की तरह स्ट्रिंग्स बना रहता है। कोई विचार?अवधिफॉर्मेटर दिन नहीं दिखा रहा है

धन्यवाद, नाथन

PeriodFormatter formatter = new PeriodFormatterBuilder() 
       .printZeroNever() 
       .appendDays() 
       .appendSuffix("d ") 
       .appendHours() 
       .appendSuffix("h ") 
       .appendMinutes() 
       .appendSuffix("m ") 
       .toFormatter(); 
     return formatter.print(duration.toPeriod()); 

उत्तर

5

इसका कारण यह है कि आप विधि के साथ Period करने के लिए Duration परिवर्तित Duratoin::toPeriod
यह Joda समय दस्तावेज में वर्णित है:

सार्वजनिक अवधि toPeriod() इस में कनवर्ट करता है मानक अवधि प्रकार और आईएसओ कालक्रम का उपयोग करते हुए अवधि अवधि की अवधि। अवधि के प्रकार में केवल सटीक फ़ील्ड का उपयोग किया जाएगा। इस प्रकार, अवधि पर केवल घंटे, मिनट, सेकंड और मिलीसेकंड फ़ील्ड का उपयोग किया जाएगा। वर्ष, महीने, सप्ताह और दिन के क्षेत्रों में आबादी नहीं होगी।

अवधि insance, आरंभ तिथि (या अंतिम तिथि) बिना ठीक से गणना की जा cann't क्योंकि कुछ दिनों 24 घंटों या 23h (डीएसटी के कारण)

आप का उपयोग shoud विधि Duration::toPeriodFrom तरीका हो सकता है इसके बजाए
ईजी

Duration duration = new Duration(date1, date2); 
// ... 
formatter.print(duration.toPeriodFrom(date1)); 
+0

अच्छा जवाब। इसके विपरीत, 'इंटरवल :: टूपीरियोड' को कॉल करने से हफ्तों, दिन और ऐसा प्रस्तुत किया जाता है क्योंकि अंतराल को दिनांक-समय मानों के आधार पर टाइमलाइन पर लगाया जाता है। एक उदाहरण के रूप में [मेरा जवाब] [http://stackoverflow.com/a/26287848/642706) देखें। –

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