2010-01-21 8 views
20

में किसी दिए गए सप्ताह संख्या का पहला दिन कैसे प्राप्त करें मुझे स्वयं को समझाएं।जावा

Date curr = new Date(); 
Calendar cal = Calendar.getInstance(); 
cal.setTime(curr); 
int nweek = cal.WEEK_OF_YEAR; 
int year = cal.YEAR; 

लेकिन अब मैं कैसे है कि सप्ताह के पहले दिन की तारीख पाने के लिए पता नहीं है: सप्ताह के नंबर और एक तिथि के वर्ष जानकर। मैं कैलेंडर, दिनांक, दिनांकफॉर्मैट में देख रहा हूं लेकिन कुछ भी उपयोगी नहीं हो सकता है ...

कोई सुझाव? (जावा में काम कर रहे हैं)

उत्तर

38

वे फ़ील्ड मान वापस नहीं करते हैं। वे स्थिरांक हैं जो Calendar ऑब्जेक्ट में फ़ील्ड को पहचानते हैं जिन्हें आप/सेट/जोड़ सकते हैं। आप जो चाहते हैं उसे प्राप्त करने के लिए, आपको पहले Calendar प्राप्त करने की आवश्यकता है, इसे साफ़ करें और ज्ञात मान सेट करें। यह स्वचालित रूप से उस सप्ताह के पहले दिन तारीख को सेट कर देगा।)

जिसके अनुसार, java.util.Date और java.util.Calendarepic failures हैं;

// We know week number and year. 
int week = 3; 
int year = 2010; 

// Get calendar, clear it and set week number and year. 
Calendar calendar = Calendar.getInstance(); 
calendar.clear(); 
calendar.set(Calendar.WEEK_OF_YEAR, week); 
calendar.set(Calendar.YEAR, year); 

// Now get the first day of week. 
Date date = calendar.getTime(); 

कृपया सीखना कैसे वर्गों/तरीकों/फ़ील्ड का उपयोग करने के लिए और अपने आईडीई में यादृच्छिक प्रहार करने की कोशिश नहीं है जानने के लिएjavadocs पढ़ । यदि आप कर सकते हैं, Joda Time पर स्विच करने पर विचार करें। हो सकता है

सप्ताह के दिन जाओ और आज की तारीख से इसे घटाना (की जरूरत है -:

+3

ध्यान दें कि सप्ताह संख्या लोकेल निर्भर हैं। _ निश्चित रूप से निश्चित करें कि आपका लोकेल सही है! –

+1

वर्तमान में जोडा समय का उपयोग कर, काम करने के लिए इतना आसान है, मैं इसे –

+0

पर स्विच करने की अनुशंसा करता हूं, धन्यवाद, यही वही है जो मुझे चाहिए। वैसे भी मैं आपके द्वारा सुझाए गए जोडा समय पर एक नज़र डालने जा रहा हूं। मैं अभी भी शुरुआती स्तर पर हूं, अभी भी बहुत कुछ सीखना है। – framara

2

मैं नहीं जावा में ज्यादा दिनांक सामान किया है, लेकिन एक समाधान हो सकता है:

cal.set(Calendar.DAY_OF_YEAR, cal.get(Calendar.DAY_OF_YEAR) - cal.get(Calendar.DAY_OF_WEEK)); 

तर्क 1, गीलेर के आधार पर आपको सोमवार या रविवार के पहले दिन होने के लिए सोमवार की आवश्यकता होती है)

0

ऐसा करने के लिए यहां कुछ त्वरित और गंदे कोड दिए गए हैं। यह कोड वर्तमान दिन की तारीख के साथ कैलेंडर ऑब्जेक्ट बनाता है, सप्ताह के वर्तमान दिन की गणना करता है, और सप्ताह के दिन को घटा देता है ताकि आप पहले (रविवार) पर हों। हालांकि मैं DAY_OF_YEAR का उपयोग कर रहा हूं, यह वर्षों से ठीक हो जाता है (1/2/10 को यह 12/27/09 वापस आ जाएगा जो सही है)।

import java.text.Format; 
import java.text.SimpleDateFormat; 
import java.util.Calendar; 
import java.util.Date; 


public class DOW { 

    public static void main(String[] args) { 
     DOW dow = new DOW(); 
     dow.doIt(); 
     System.exit(0); 
    } 

    private void doIt() { 
     Date curr = new Date(); 
     Calendar cal = Calendar.getInstance(); 
     cal.setTime(curr); 
     int currentDOW = cal.get(Calendar.DAY_OF_WEEK); 
     cal.add(Calendar.DAY_OF_YEAR, (currentDOW * -1)+1); 

     Format formatter = new SimpleDateFormat("MM/dd/yy"); 
     System.out.println("First day of week="+formatter.format(cal.getTime())); 
    } 
} 
0

उन के साथ सतर्क रहें, calendar.get(Calendar.WEEK_OF_YEAR) रिटर्न 1 अगर यह दिसंबर के अंत और पहले से ही एक सप्ताह है कि अगले साल में समाप्त हो जाती है।

//   cal2.set(Calendar.WEEK_OF_YEAR, cal.get(Calendar.WEEK_OF_YEAR)); 
//   cal2.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY); 

का उपयोग करते हुए सेट उदा को cal2 तारीख 200 9 के अंत में 2 9/12/2010 को !!

मैं इस प्रयोग किया है:

cal2.set(Calendar.DAY_OF_YEAR, cal.get(Calendar.DAY_OF_YEAR)); //to round at the start of day 
cal2.set(Calendar.YEAR, cal.get(Calendar.YEAR)); 
cal2.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY); //to round at the start of week 

मैं यह भी सुनिश्चित करें कि अपने कैलेंडर में सप्ताह, कोई बात नहीं क्या स्थान वे में हैं, सोमवार को शुरू कर रहे हैं:

cal.setFirstDayOfWeek(Calendar.MONDAY); 
cal2.setFirstDayOfWeek(Calendar.MONDAY); 
3

इस प्रयास करें:

public static Calendar setWeekStart(Calendar calendar) { 
    while (calendar.get(Calendar.DAY_OF_WEEK) != Calendar.MONDAY) { 
    calendar.add(Calendar.DATE, -1); 
    } 
    setDayStart(calendar); // method which sets H:M:S:ms to 0 
    return calendar; 
} 
+0

कैलेंडर। सोमवार को कैलेंडर में बदलना होगा .getFirstDayOfWeek() –

+0

सच है, इसे अपडेट किया गया – Tarion

1

फिर भी एक और तरीका ...

GregorianCalendar cal = new GregorianCalendar(); 
    cal.clearTime(); 
    Integer correction = 1-cal.get(GregorianCalendar.DAY_OF_WEEK) 
    cal.add(Calendar.DATE, correction); 

कैलोरी अब सप्ताह के पहले दिन

1-cal.get(GregorianCalendar.DAY_OF_WEEK)

सोमवार के लिए रविवार (मेरी लोकेल में सप्ताह के पहले दिन) और 1-2 के लिए 1-1 का आकलन करती है, तो यह तुम वापस रविवार को सुधार घड़ी रिवाइंड करने के लिए की जरूरत है दे देंगे

0

ग्रेगोरियन कैलेंडर एल्गोरिथ्म का प्रयास करें:

public int getFirstDay(int m, int year) 
    { 
     int k=1; 
     int c, y, w, M=0; 
     if(m>2 && m<=12) M=m-2; 
     else if(m>0 && M<=2) 
     { 
      M=m+10; 
      year-=1; 
     } 
     c=year/100; 
     y=year%100; 
     w=(int)((k+(Math.floor(2.6*M - 0.2))-2*c+y+(Math.floor(y/4))+(Math.floor(c/4)))%7);//a fantastic formula   
     if(w<0) w+=7; 
     return w;//thus the day of the week is obtained! 
    }