2009-06-24 1 views
1

Abgesehen von den integrierten Funktionen können wir alle einfachen Formeln verwenden, um den Anfangstag des Monats für Monat und Jahr als Eingaben zu berechnen?Kalendermethoden

Antwort

3

Ja - nutzen Sie die Calendar Objekt:

Calendar cal = Calendar.getInstance(); 
cal.set(Calendar.YEAR, 2009) 
cal.set(Calendar.MONTH, Calendar.JUNE) //0-based so that Calendar.JANUARY is 0 
cal.set(Calendar.DAY_OF_MONTH, 1) 

Dann:

cal.get(Calendar.DAY_OF_WEEK); //is Calendar.MONDAY 

So könnte man leicht ein Verfahren für das Komponieren:

/** takes a 1-based month so that Jjanuary is 1 */ 
public int getDayAtStart(int year, int month) { 
    Calendar cal = Calendar.getInstance(); 
    cal.set(Calendar.YEAR, year) 
    cal.set(Calendar.MONTH, month - 1); 
    cal.set(Calendar.DAY_OF_MONTH, 1); 
    return cal.get(Calendar.DAY_OF_WEEK); 
} 
1

konstruieren einen Kalender (cal) mit dem angegebenen Monat und Jahr, und Tag 1, und cal.get(Calendar.DAY_OF_WEEK) ... Entschuldigung, glaube nicht, dass es ein Re irgendwelche Builtins nur für diese Aufgabe

2

Wie immer würde ich empfehlen, Joda Time zu verwenden. Ich wage zu sagen, java.util.Calendar wird dafür funktionieren, aber ich bevorzuge Joda Time für alle Datum und Uhrzeit Berechnungen wann immer möglich. Die integrierten APIs sind schrecklich. Joda macht das wirklich sehr einfach. (Sofern nicht anders angegeben, wird davon ausgegangen LocalDate ein ISOChronology - Ich erwarte, dass das, was Sie wollen, aber Sie können einen anderen angeben, wenn Sie müssen.)

import org.joda.time.*; 

public class Test 
{ 
    // Just for the sake of a simple test program! 
    public static void main(String[] args) throws Exception 
    { 
     // Prints 1 (Monday) 
     System.out.println(getFirstDayOfMonth(2009, 6)); 
    } 

    /** Returns 1 (Monday) to 7 (Sunday) */ 
    private static int getFirstDayOfMonth(int year, int month) 
    { 
     LocalDate date = new LocalDate(year, month, 1); 
     return date.getDayOfWeek(); 
    } 
} 

Oder wenn Sie ihn nur an einem Ort tun müssen, können Sie zerdrücken sie in eine einzige Zeile, wenn Sie wollen:

int day = new LocalDate(year, month, 1).getDayOfWeek(); 

es ist schwer zu sehen, wie es so viel einfacher sein könnte als :)

+0

nicht viel Sinn, das Lernen jetzt Joda Zeit, dass JSR 310 über die treffen Regale? –

+0

Ich werde es glauben, wenn ich sehe, dass es tatsächlich veröffentlicht wird - und wenn jeder * Java * 7 benutzt *. Ich erwarte nicht, dass überall, sobald es ausgeliefert wird, es springt. Mit dem gleichen Designer erwarte ich, dass es ähnlich genug sein wird, dass die Zeit, die wir mit Joda Time verbracht haben, jetzt nicht verschwendet wird. –

+0

Wenn man es anschaut, fühlt es sich ganz anders an als JODA –