2010-01-15 16 views
7

के माध्यम से पुनरावृत्त करता है मेरे पास प्रारंभ तिथि और समाप्ति तिथि है। मुझे इन 2 तिथियों के बीच हर दिन फिर से भरना होगा।मुझे एक चक्र की आवश्यकता है जो दिनांक अंतराल

ऐसा करने का सबसे अच्छा तरीका क्या है?

Date currentDate = new Date (startDate.getTime()); 
while (true) { 
    if (currentDate.getTime() >= endDate.getTime()) 
     break; 
    doSmth(); 
    currentDate = new Date (currentDate.getTime() + MILLIS_PER_DAY); 
} 

उत्तर

13

तैयार एक कैलेंडर वस्तु का उपयोग करने के कह रही है उन पर ;-)

public static void main(String[] args) throws ParseException { 
    GregorianCalendar gcal = new GregorianCalendar(); 
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy.MM.dd"); 
    Date start = sdf.parse("2010.01.01"); 
    Date end = sdf.parse("2010.01.14"); 
    gcal.setTime(start); 
    while (gcal.getTime().before(end)) { 
     gcal.add(Calendar.DAY_OF_YEAR, 1); 
     System.out.println(gcal.getTime().toString()); 
    } 
} 
+0

आपके उत्तर ने मेरी जान बचाई !!! – NinjaBoy

3

उपयोग एक कैलेंडर वस्तु अगर आप तारीखों में हेरफेर करना चाहते हैं।

Calendar c = Calendar.getInstance(); 
    // ... set the calendar time ... 
    Date endDate = new Date(); 
    // ... set the endDate value ... 

    while (c.getTime().before(endDate) { 
     // do something 
     c.add(Calendar.DAY_OF_WEEK, 1); 
    } 

या Joda Time

6

डिट्टो को चलाने के लिए इस्तेमाल करते हैं।

यदि आप डेट ऑब्जेक्ट का उपयोग करने का प्रयास करते हैं और इसमें 24 घंटे जोड़ते हैं तो आप आश्चर्यजनक परेशानी में पड़ सकते हैं।

यहां आपके लिए एक पहेली है: साल का सबसे लंबा महीना क्या है? आपको लगता है कि उस प्रश्न का कोई जवाब नहीं है। सात महीने में 31 दिन प्रत्येक होते हैं, इसलिए वे सभी एक ही लंबाई हैं, है ना? खैर, संयुक्त राज्य अमेरिका में यह लगभग सही होगा, लेकिन यूरोप में यह गलत होगा! यूरोप में, अक्टूबर सबसे लंबा महीना है। इसमें 31 दिन और 1 घंटा है, क्योंकि यूरोपियों ने अक्टूबर में डेलाइट सेविंग टाइम के लिए 1 घंटे पहले अपने घड़ियों को सेट किया था, जो पिछले 25 घंटों में अक्टूबर में एक दिन बना रहा था। (अमेरिकियों ने अब नवंबर में डीएसटी शुरू किया है, जिसमें 30 दिन हैं, इसलिए नवंबर अक्टूबर या दिसंबर से भी कम है। इस प्रकार यह पहेली अमेरिकियों के लिए मनोरंजक नहीं है।)

मैं एक बार ठीक से कर रहा हूं करने की कोशिश कर रहा है: मैंने डेट ऑब्जेक्ट का उपयोग किया और लूप में 24 घंटे जोड़े। यह तब तक काम करता था जब तक मैंने डेलाइट सेविंग टाइम सीमाओं को पार नहीं किया था। लेकिन जब मैंने किया, अचानक मैंने एक दिन छोड़ दिया या उसी दिन दो बार मारा, क्योंकि 8 मार्च, 200 9 + 24 घंटे = 1:00 पूर्वाह्न 10 मार्च। समय को छोड़ दो, जैसा कि मैं कर रहा था, और 9 मार्च रहस्यमय ढंग से छोड़ दिया गया था । इसी तरह मध्यरात्रि 1 नवंबर, 200 9 + 24 घंटे = 11:00 अपराह्न 1 नवंबर, और हमने 1 नवंबर को दो बार मारा।

+0

आपके अतिरिक्त – Roman

+0

के लिए धन्यवाद दिलचस्प है, लेकिन लोग 'रन टू रन' कोड के लिए अधिक वोट देते हैं :) –

+0

स्टेकर पहले ही कोड दे चुका था। मैं बस यह बताने की कोशिश कर रहा था कि क्यों सही जवाब था और ओपी विचार काम नहीं करेगा। निश्चित रूप से, काम करने वाले कोड का एक उदाहरण एक अच्छी बात है, लेकिन जब तक आप समझते हैं कि यह क्यों काम करता है, यह केवल आपको तत्काल समस्या से पीछे ले जाता है। अगली बार एक समान लेकिन काफी समान समस्या नहीं आती है, तो आप फिर से अटक जाएंगे। :-) – Jay

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