2012-05-03 12 views
6

मुझे एक दिन के सभी दिनों की संख्या प्राप्त करने की आवश्यकता है (सूर्य से सोम) जिस दिन पैरामीटर के रूप में भेजा जाता है।वर्तमान सप्ताह के सभी दिन प्राप्त करें?

उदाहरण के लिए,
मैं 2 मई को पास करता हूं और मुझे एक सरणी मिलती है [30,1,2,3,4,5,6] जो वास्तव में इस सप्ताह है।
या, मैं 16 मई को पास करता हूं और मुझे एक सरणी मिलती है [14,15,16,17,18,19,20]।

मैंने इस कोड का उपयोग करने की कोशिश की, लेकिन यह आज से 7 दिन लौटा, जो मैं नहीं चाहता।

 //get which week of month 
     Calendar now = Calendar.getInstance(); 
     now.set(mYear, mMonth, Integer.parseInt(extractedDay)); 
     int weekOfMonth = now.get(Calendar.WEEK_OF_MONTH); 

     //get all days of clicked week 
     SimpleDateFormat format = new SimpleDateFormat("MM/dd/yyyy"); 
     Calendar calendar = Calendar.getInstance(); 
     calendar.setFirstDayOfWeek(Calendar.MONDAY); 
     calendar.set(mYear, mMonth, Integer.parseInt(extractedDay)); 

     String[] days = new String[7]; 
     for (int i = 0; i < 7; i++) 
     { 
      days[i] = format.format(calendar.getTime()); 
      calendar.add(Calendar.DAY_OF_MONTH, 1); 
     } 

लेकिन यह मेरी आवश्यकता नहीं है। मैं आज के दिन (गुरु) पारित करने के लिए और मई के इस सप्ताह की तारीखों प्राप्त करने की आवश्यकता - 6 मई

संपादित

मुझे एहसास हुआ कि मैं एक कोड है जो पता लगाता है सोम, रवि अप्रैल 30, जो एक महीने का सप्ताह यह है। क्या इस डेटा का उपयोग करने और सोमवार के लिए तारीख निर्धारित करने का कोई तरीका है? उदाहरण के लिए, मैं 16 मई को पास करता हूं और फिर मुझे लगता है कि यह मई का तीसरा सप्ताह है, और मैंने 14 मई को परिवर्तनीय firstDayOfWeek (एक नया चर) सेट किया है।

+0

क्या आप सार में नमूना कोड को कम कर सकते हैं? हमें "महीने के किस सप्ताह" कोड की आवश्यकता नहीं है और यह मुझे पहली नज़र में उलझन में डाल दिया। –

उत्तर

19

आपको के पहले दिन से शुरू करने के लिए, दिन आप चुनते के काम करने के दिन घटाना पहले है सप्ताह। निम्नलिखित कोड का प्रयास करें:

public static void main(String[] args){ 
    Calendar now = Calendar.getInstance(); 

    SimpleDateFormat format = new SimpleDateFormat("MM/dd/yyyy"); 

    String[] days = new String[7]; 
    int delta = -now.get(GregorianCalendar.DAY_OF_WEEK) + 2; //add 2 if your week start on monday 
    now.add(Calendar.DAY_OF_MONTH, delta); 
    for (int i = 0; i < 7; i++) 
    { 
     days[i] = format.format(now.getTime()); 
     now.add(Calendar.DAY_OF_MONTH, 1); 
    } 
    System.out.println(Arrays.toString(days)); 

} 

आज, यह उत्पादन:

[2012/04/30, 2012/05/01, 2012/05/02, 05/03/2012, 05/04/2012, 05/05/2012, 05/06/2012]

+0

यह काम नहीं करता है। केवल Thu के लिए काम करता है। बस अन्य दिनों का प्रयास करें। – sandalone

+0

मैंने अभी इस सप्ताह के अन्य दिनों की कोशिश की है। यह एक ही परिणाम आउटपुट। आप किस तारीख की कोशिश कर रहे हैं? –

+0

16 मई। मैं 'now.set (2012, 4, 16) 'या थू – sandalone

1

आपको कहीं भी कोड की इस पंक्ति का उपयोग करना होगा वर्तमान कोड:

calendar.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY); 

यह कम से कम फॉर-लूप से पहले होना चाहिए।

+0

मैंने किया। अभी भी वही परिणाम। पारित दिन से 7 दिन आगे। – sandalone

0

आप दिन आप तारीख तय के बाद निर्धारित करने की आवश्यकता

calendar.set(mYear, mMonth, Integer.parseInt(extractedDay)); calendar.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);

4

आपका प्रश्न पहले से ही उत्तर दिया गया है, लेकिन मैं थोड़ा सा जोड़ना चाहता हूं। आपका कोड को दो तरह से समस्याग्रस्त है:

  1. यह प्रारंभिक तिथि के लिए विभिन्न डेटा प्रकार (? mYearint और exactDayString है) का उपयोग करता है।
  2. यह परिणाम की पार्सिंग, स्वरूपण और पीढ़ी को मिलाता है।

इससे आपके लिए कोड का परीक्षण करना मुश्किल हो जाता है!

public class DaysOfCurrentWeek { 
    public static void main(String[] args) { 
     Date refDate = new Date(); 

     Date[] days = getDaysOfWeek(refDate, Calendar.getInstance().getFirstDayOfWeek()); 

     for (Date day : days) { 
      System.out.println(day); 
     } 
    } 

    private static Date[] getDaysOfWeek(Date refDate, int firstDayOfWeek) { 
     Calendar calendar = Calendar.getInstance(); 
     calendar.setTime(refDate); 
     calendar.set(Calendar.DAY_OF_WEEK, firstDayOfWeek); 
     Date[] daysOfWeek = new Date[7]; 
     for (int i = 0; i < 7; i++) { 
      daysOfWeek[i] = calendar.getTime(); 
      calendar.add(Calendar.DAY_OF_MONTH, 1); 
     } 
     return daysOfWeek; 
    } 
} 

कोड इस तरह काम करता है::

  1. एक संदर्भ तारीख बनाएं (इस उदाहरण में सिर्फ new Date() का उपयोग करके)

    इसलिए, मैं एक अलग दृष्टिकोण का प्रस्ताव।

  2. "गंदी नौकरी" करने के लिए getDaysOfWeek() पर कॉल करें। firstDayOfWeek पास करके आप सप्ताह की शुरुआत के रूप में MONDAY या SUNDAY चुनने के लिए स्वतंत्र हैं। इस उदाहरण में, मैं सिर्फ कैलेंडर के डिफ़ॉल्ट का उपयोग करता हूं।
  3. परिणाम लौटाएं - बिना प्रारूपित, और Date के रूप में। इस तरह आप कॉलिंग कोड को यह तय करने दे सकते हैं कि क्या करना है - इसे प्रिंट करें या कुछ और गणना करें।

अब आप फ़ॉर्मेटिंग के बारे में चिंता किए बिना getDaysOfWeek() विधि का परीक्षण कर सकते हैं या संदर्भ दिनांक कैसे बनाया गया है।

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