Avatar billede martinhrj Nybegynder
13. august 2002 - 11:23 Der er 11 kommentarer og
1 løsning

Calendar - first day of week

Er der nogen der har haft problemer (og løst dem) med følgende:
Calendar c = new Calendar();
c.setFirstDayOfWeek(Calendar.WEDNESDAY);

Uanset hvad jeg skriver i stedet for WEDNESDAY, får jeg søndag som første dag i ugen!

Jeg bruger JVM 1.4.

Martin
Avatar billede disky Nybegynder
13. august 2002 - 11:36 #1
prøv at brug GregorianCalendar istedet.

Om det hjælper kan jeg dog ikke lige teste
Avatar billede martinhrj Nybegynder
13. august 2002 - 13:14 #2
Hmm... det prøver jeg!
Avatar billede martinhrj Nybegynder
13. august 2002 - 13:19 #3
Nej, det gør ingen forskel! GregorianCalendar nedarver jo bare fra Calendar... den har lidt nye metoder, men ved setFirstDayOfWeek() bliver superklassens metode brugt...
Avatar billede disky Nybegynder
13. august 2002 - 13:38 #4
Post den kode du bruger til at sætte og checke det med tak.
Avatar billede martinhrj Nybegynder
13. august 2002 - 13:56 #5
Vær' så god! Knock yourself out :)

    private void setD(int month, int year){
        currentMonth = month;
        currentYear = year;
       
        weekNrPanel.removeAll();
        viewPanel.removeAll();
        weekNrPanel.repaint();
        viewPanel.repaint();
       
        ((GridLayout)(viewPanel.getLayout())).setRows(1);
        ((GridLayout)(weekNrPanel.getLayout())).setRows(1);
       
        Calendar c = Calendar.getInstance();
        c.set(year, month, 1);
       
        monthLabel.setText(months[c.get(Calendar.MONTH)]);
        yearLabel.setText(Integer.toString(c.get(Calendar.YEAR)));
       
        c.set(c.get(Calendar.YEAR), c.get(Calendar.MONTH), 1);
        c.setFirstDayOfWeek(Calendar.WEDNESDAY);
       
        int j;
        System.out.println("Day of Week = " +c.get(Calendar.DAY_OF_WEEK));
        System.out.println("Of Month = " + c.get(Calendar.DAY_OF_MONTH));
       
        for(j=1; j< c.get(Calendar.DAY_OF_WEEK); j++){
            viewPanel.add(new JLabel("-", 0));
        }

        int thisMonth = c.get(Calendar.MONTH);
        int nextWeek = c.get(Calendar.WEEK_OF_YEAR);

        boolean first = true;
        while(c.get(Calendar.MONTH)==thisMonth){
            if(nextWeek==c.get(Calendar.WEEK_OF_YEAR)){
                nextWeek=c.get(Calendar.WEEK_OF_YEAR)+1;
                weekNrPanel.add(new JLabel(Integer.toString(c.get(Calendar.WEEK_OF_YEAR))));
                if(!first){
                    ((GridLayout)(viewPanel.getLayout())).setRows(((GridLayout)(viewPanel.getLayout())).getRows()+1);
                    ((GridLayout)(weekNrPanel.getLayout())).setRows(((GridLayout)(weekNrPanel.getLayout())).getRows()+1);
                }
                else
                    first=false;
            }
            viewPanel.add(new JLabel(Integer.toString(c.get(Calendar.DAY_OF_MONTH)), 0));
            c.roll(Calendar.DAY_OF_MONTH, true);
            j++;
            if(c.get(Calendar.DAY_OF_MONTH)==1)
                c.roll(Calendar.MONTH, true);
        }

        for(int i=j; i<=(((GridLayout)(viewPanel.getLayout())).getRows())*7; i++){
            viewPanel.add(new JLabel("-", 0));
        }
    }
Avatar billede martinhrj Nybegynder
13. august 2002 - 13:57 #6
first day of week er sat til onsdag nu... men jeg vil gerne have den sat til mandag... men som sagt, virker det hele tiden som om den er sat til søndag!
Avatar billede disky Nybegynder
13. august 2002 - 14:10 #7
dette eksempel virker fint:
/*
* DatoTest.java
*
* Created on 13. august 2002, 14:08
*/

import java.util.*;

/**
*
* @author  Reinke
* @version
*/
public class DatoTest
{
   
    /** Creates new DatoTest */
    public DatoTest()
    {
        Calendar dato=Calendar.getInstance();
        System.out.println("FirstDayOfWeek nu = "+dato.getFirstDayOfWeek() +" hvilket vil sige mandag");
        dato.setFirstDayOfWeek(Calendar.WEDNESDAY);
        System.out.println("FirstDayOfWeek nu = "+dato.getFirstDayOfWeek() +" hvilket vil sige onsdag");
    }
   
    /**
    * @param args the command line arguments
    */
    public static void main(String args[])
    {
        new DatoTest();
    }
   
}


skrive henholdsvis '2' og '4' for mandag og onsdag.
Avatar billede martinhrj Nybegynder
13. august 2002 - 14:41 #8
Prøv dette eksempel så... burde idag ikke være henholdsvis 2 og 7? Tæller den ikke fra "firstDayOfWeek"?

import java.util.*;

/**
*
* @author Reinke
* @version
*/
public class DatoTest
{
public static void main(String args[])
{
new DatoTest();
}


/** Creates new DatoTest */
public DatoTest()
{
Calendar dato=Calendar.getInstance();
System.out.println("FirstDayOfWeek nu = "+dato.getFirstDayOfWeek() +" hvilket vil sige mandag");
System.out.println("Idag = " + dato.get(Calendar.DAY_OF_WEEK));
dato.setFirstDayOfWeek(Calendar.WEDNESDAY);
System.out.println("FirstDayOfWeek nu = "+dato.getFirstDayOfWeek() +" hvilket vil sige onsdag");
System.out.println("Idag = " + dato.get(Calendar.DAY_OF_WEEK));
}


}
Avatar billede disky Nybegynder
13. august 2002 - 16:13 #9
hvad mener du med 2 og 7 ?

Hvilke tal den udskriver afhænger af hvilket sprog dit system kører.

Men steFirstDayOfWeek virker 100% som det skal, altså må fejlen være et sted i din kode.
Avatar billede martinhrj Nybegynder
13. august 2002 - 17:16 #10
Når jeg kalder dato.get(Calendar.DAY_OF_WEEK)
er den så ikke afhængig af hvad firstDayOfWeek er sat til?
Avatar billede disky Nybegynder
13. august 2002 - 18:27 #11
Nej, de værdier du får passer til f.eks. Calendar.THURSDAY, og er helt uafhængige af hvilken uge dag du synes der skal starten ugen.

Jeg mener kun start uge dagen, kan har indflydelse på uge nummeret.
Avatar billede martinhrj Nybegynder
14. august 2002 - 08:37 #12
Jeg takker og bukker for svaret :)

Så lærte vi også noget idag!
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester