2010-10-25 17 views
8

मैं बस चाहता हूँ पूछना कारगर तरीका एक निश्चित महीने के सप्ताह के नंबर प्राप्त करने के लिए है क्या। मैं महीने के नंबर के साथ एक समारोह & साल तर्कों के रूप है, समारोह की वापसी मान (निम्नलिखित की तरह ...) एक पूर्णांक सरणी जो विशिष्ट महीने के सप्ताह संख्याएँ शामिल किया जाना चाहिए।एक निश्चित महीने के सप्ताह संख्या कैसे प्राप्त करें?

public int[] getWeeksOfMonth(int month, int year){ 
      //what's the efficient way to implement this?? 
} 
+0

प्रश्न स्पष्ट नहीं है और अपने पिछले प्रश्नों के उत्तर स्वीकार करते हैं। – Emil

+0

आपके अन्य प्रश्नों में से एक का डुप्लिकेट आपने स्वीकार नहीं किया! http://stackoverflow.com/questions/3941700/how-to-get-dates-of-a-week-i-now-week-number –

उत्तर

9

WEEK_OF_YEAR विशेषता Calendar कक्षा आपके लिए उपयोगी हो सकती है।

एक नई तिथि है जो दिए गए महीने के पहले दिन हो जाएगा बनाएँ। इस दिन के लिए सप्ताह का सप्ताह प्राप्त करें, मान लें कि आपको start मान मिला है।

एक नई तिथि है जो दिए गए महीने के अंतिम दिन हो जाएगा बनाएँ। इस दिन के लिए साल के सप्ताह प्राप्त करें, ताकि अब आप end मूल्य मिला है।

अंत में, एक सरल int[] बनाएं जिसमें start से end के मान शामिल होंगे।

+2

आपको पूरे महीने के माध्यम से पुन: प्रयास नहीं करना है। बस पहले दिन के सप्ताह पर एक नज़र डालें, 'एस' कहें, और पिछले दिन के सप्ताह में, 'ई' कहें, और 'e' s + 1' मानों को' s' से 'e' तक रखने वाले सरणी का निर्माण करें। – Flinsch

+0

@ फ्लिंस्च हां, आप सही हैं। मैंने अपना जवाब अपडेट कर लिया है। – romaintaz

+2

फ्लिंस्च: यह सभी मामलों में काम नहीं करेगा। उदाहरण के लिए जनवरी 2010 देखें। वर्ष के तीन पहले दिन सप्ताह 53 के हैं। चौथा दिन सप्ताह से संबंधित है 1. – Grodriguez

0
  1. महीने के पहले और अंतिम दिन के लिए कैलेंडर उदाहरण बनाएं।
  2. तो प्रत्येक उदाहरण पर [2] वापस शुरू करने और सप्ताह के लिए सूचकांक न खत्म होने वाली जाएगा
+0

ध्यान दें कि यह हो सकता है (अंत सूचकांक <प्रारंभ सूचकांक)। – Grodriguez

+0

हम्म - कैसे? जब तक यह वही महीना है जिसके साथ हम काम कर रहे हैं, यह कैसे हो सकता है कि अंत इंडेक्स anirvan

3

मुझे यकीन है कि है कि क्या आप की संख्या के बराबर लंबाई की एक सरणी वापस करना चाहते नहीं कर रहा हूँ get(Calendar.WEEK_OF_YEAR)

  • चरण आह्वान महीने में दिनों, प्रत्येक मान इसी दिन के लिए सप्ताह के नंबर, या निर्दिष्ट महीने में दिनों के लिए सभी अलग सप्ताह संख्या की एक सरणी होने के साथ। मान लिया जाये कि यह पूर्व है, यह काम करना चाहिए:

    public static int[] getWeeksOfMonth(int month, int year) 
    { 
        Calendar cal = Calendar.getInstance(); 
        cal.set(Calendar.YEAR, year); 
        cal.set(Calendar.MONTH, month); 
        cal.set(Calendar.DAY_OF_MONTH, 1); 
    
        int ndays = cal.getActualMaximum(Calendar.DAY_OF_MONTH); 
        int weeks[] = new int[ndays]; 
        for (int i = 0; i < ndays; i++) 
        { 
         weeks[i] = cal.get(Calendar.WEEK_OF_YEAR); 
         cal.add(Calendar.DATE, 1); 
        } 
        return weeks; 
    } 
    

    आपके द्वारा निर्दिष्ट महीने में दिनों के लिए अलग सप्ताह संख्या की एक सरणी चाहते हैं:

    public static Integer[] getWeeksOfMonth(int month, int year) 
    { 
        Calendar cal = Calendar.getInstance(); 
        cal.set(Calendar.YEAR, year); 
        cal.set(Calendar.MONTH, month); 
        cal.set(Calendar.DAY_OF_MONTH, 1); 
    
        Set<Integer> weeks = new HashSet<Integer>(); 
        int ndays = cal.getActualMaximum(Calendar.DAY_OF_MONTH); 
        for (int i = 0; i < ndays; i++) 
        { 
         weeks.add(cal.get(Calendar.WEEK_OF_YEAR)); 
         cal.add(Calendar.DATE, 1); 
        } 
    
        return weeks.toArray(new Integer[0]); 
    } 
    

    (यह पिछले उदाहरण नोट की एक सरणी देता है Integer ऑब्जेक्ट्स, लेकिन इसके बजाय इसे int की सरणी वापस करने के लिए संशोधित करना मुश्किल है)

  • 5

    कैलेंडर cal = calendar.getInstance();

    पूर्णांक maxWeeknumber = cal.getActualMaximum (Calendar.WEEK_OF_MONTH);

    +0

    यह आपको एक निश्चित महीने में कितने सप्ताह देता है, जो आम तौर पर 5 से 6 तक भिन्न होता है (फरवरी के अपवाद के साथ, जो केवल 4 सप्ताह हो सकता है) – Maragues

    3

    मुझे लगता है, कि यह बहुत सरल तरीका है:

    Calendar now = Calendar.getInstance(); 
    
    System.out.println("Current week of month is : " + 
          now.get(Calendar.WEEK_OF_MONTH)); 
    
    संबंधित मुद्दे