2010-02-10 14 views
5

मुझे जोडा टाइम की अवधिफॉर्मेटर का उपयोग करने में परेशानी हो रही है। मैं चाहता हूं कि कोई दिन, घंटों, मिनट और सेकंड की रिपोर्ट करे, लेकिन मेरा प्रयास सप्ताहों में लपेटने लगता है। मुझे अलग-अलग क्या करना चाहिए?मेरा अवधिफॉर्मेटर व्यवहार नहीं कर रहा है जैसा कि मैं उम्मीद करता हूं - मैंने क्या गलत किया है?

import org.joda.time.DateTime; 
import org.joda.time.Period; 
import org.joda.time.format.PeriodFormatter; 
import org.joda.time.format.PeriodFormatterBuilder; 

public class Problems { 

    public static void main(String[] args) { 

     PeriodFormatter formatter = new PeriodFormatterBuilder() 
      .printZeroNever() 
      .appendDays() 
      .appendSuffix(" day", " days") 
      .appendSeparator(", ") 
      .appendHours() 
      .appendSuffix(" hour", " hours") 
      .appendSeparator(", ") 
      .appendMinutes() 
      .appendSuffix(" minute", " minutes") 
      .appendSeparator(", ") 
      .appendSeconds() 
      .appendSuffix(" second", " seconds") 
      .toFormatter(); 

     DateTime now = new DateTime(); 
     DateTime justUnderAWeekAgo = now.minusDays(7).plusMinutes(1); 
     DateTime justOverAWeekAgo = now.minusDays(7).minusMinutes(1); 
     System.out.println(now); 
     System.out.println(justUnderAWeekAgo); 
     System.out.println(justOverAWeekAgo); 
     // I am happy with the following: 
     System.out.println(
      formatter.print(new Period(justUnderAWeekAgo, now))); 
     // But not with this (outputs "1 minute" but I want "7 days, 1 minute"): 
     System.out.println(
      formatter.print(new Period(justOverAWeekAgo, now))); 
    } 
} 

संपादित करें: मुझे लगता है कि मैं देख सकता हूँ क्यों इस काम कर रहा है नहीं - यानी कि फ़ॉर्मेटर बस अवधि के विभिन्न मूल्यों प्रिंट, और काल के बाद से, दिनों के लिए मूल्य मेरी समस्या पर हफ्तों के लिए एक मूल्य की दुकान अवधि वास्तव में 0 है। लेकिन मुझे अभी भी ऐसा करने का एक अच्छा तरीका चाहिए ...

उत्तर

12

आपके मामले में समस्या यह है कि आप सप्ताहों को प्रदर्शित करने के लिए अपने PeriodFormatter से नहीं पूछते हैं।

दो संभावनाएं:

समाधान 1: प्रदर्शन सप्ताह:

PeriodFormatter formatter = new PeriodFormatterBuilder() 
     .printZeroNever() 
     .appendWeeks() 
     .appendSuffix(" week", " weeks") 
     .appendSeparator(", ") 
     .appendDays() 
     .appendSuffix(" day", " days") 
     .appendSeparator(", ") 
     .appendHours() 
     .appendSuffix(" hour", " hours") 
     .appendSeparator(", ") 
     .appendMinutes() 
     .appendSuffix(" minute", " minutes") 
     .appendSeparator(", ") 
     .appendSeconds() 
     .appendSuffix(" second", " seconds") 
     .toFormatter(); 

अपने उदाहरण में दूसरा उत्पादन होगा:

1 week, 1 minute 

समाधान 2: केवल प्रदर्शन दिन इसलिए आपको PeriodType.yearMonthDayTime():

का उपयोग करना होगा
new Period(justUndeAWeekAgo, now, PeriodType.yearMonthDayTime()); 

इस दूसरे समाधान का उपयोग करके, आप अपने PeriodFormatter को अभी भी रख सकते हैं। आपके उदाहरण में दूसरा आउटपुट तब होगा:

7 days, 1 minute 
+0

आप सप्ताहों के लिए एक विभाजक गायब थे। – ripper234

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

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