Visualizzazione dei risultati da 1 a 8 su 8
  1. #1
    Utente di HTML.it
    Registrato dal
    Dec 2006
    Messaggi
    22

    Classe calendar: Problema con day_of_week

    Salve;
    sto utilizzando la classe CALENDAR è ho un problema; utilizzo il seguente codice per settare il giorno della settimana nel mio calendario:

    myCalendar.set (Calendar.DAY_OF_WEEK, d);

    "d" e il giorno della settimana che ha un valore intero compreso tra 1 e 7.
    Il risultato di questa linea di codice è piuttosto ambiguo infatti il valore che la classe CALENDAR attribuisce al giorno della settimana non è mai lo stesso.

    Qualcuno di voi sa spiegarmi a cosa è dovuto e come posso risolvere tale problema???

    Grazie a tutti.

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Cosa vuol dire "il valore che la classe CALENDAR attribuisce al giorno della settimana non è mai lo stesso"?

    Poi, fammi capire cosa intendi fare con quell'istruzione: non credo che tu possa definire un giorno della settimana diverso da quello reale (o, per lo meno, non ne vedo il motivo).
    Da come la vedo io il 25 dicembre 2006 è e per sempre rimarrà un LUNEDI'... non ho nemmeno mai provato a cambiarlo in un MARTEDI', non so, quindi, se è possibile, ma anche se fosse possibile non ne vedo l'utilità.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  3. #3
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    Da quel che ho capito io, puoi modificare tutti i campi con tutti i valori che vuoi, inventarti un 32 febbraio o dire che un mercoledì è un giovedì. Calendar ti lascia fare tutto quel che vuoi per non appesantire il sistema con chiamate a getTime, che invece viene chiamato tutte le volte che andrai a fare un'altra qualsiasi operazione con il Date con cui hai inizializzato il Calendar. Per cui, provare a settare il giorno della settimana a qualcosa di diverso da quello reale del Date che hai utilizzato o da quello computato effettivamente da Calendar non ha alcun effetto reale nei passaggi successivi. Almeno è quanto si evince dal paragrafo su set(f, v) che c'è nelle API alla voce Calendar.
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  4. #4
    Utente di HTML.it
    Registrato dal
    Dec 2006
    Messaggi
    22
    Io prima recupero il numero del giorno da una stringa ( e lo salvo in "day_week") e con il codice che segue la converto in intero e la salvo nel mio calendario:

    Calendar myCalendar = Calendar.getInstance();

    String[] d_w = { "Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun" };
    int[] decodes = {Calendar.MONDAY, Calendar.TUESDAY, Calendar.WEDNESDAY, Calendar.THURSDAY, Calendar.FRIDAY, Calendar.SATURDAY, Calendar.SUNDAY};

    for (int i=0; i<=d_w.length;i++)
    {
    if (d_w[i].equals (day_week))
    {
    myCalendar.set (Calendar.DAY_OF_WEEK, decodes[i]);
    break;
    }
    }

    se poi scrivo la seguente riga di codice:

    System.out.println(myCalendar.get(Calendar.DAY_OF_ WEEK));

    il valore d'uscita nn corrisponde con quello da me impostato....

  5. #5
    Utente di HTML.it L'avatar di nether
    Registrato dal
    Dec 2006
    Messaggi
    376
    credo che il motivo te l'abbiano spiegato sopra... quando inizializzi l'oggetto "myCalendar" facendo Calendar.getInstance(), in realta' inizializzi l'oggetto calendar con l'ora attuale presa dal tuo pc (non ho controllato sulla guida ma credo che sia come inizializzare una data facendo new Date()).

    ovviamente oggi 28 dicembre 2006 e' giovedi e soltanto giovedi, non ha senso che oggi sia venerdi' o sabato o domenica

    quindi tu setti un altro giorno della settimana alla data di oggi, il che non provoca nessuna eccezione perche' non ci sono controlli in merito (come diceva qualcuno prima).
    Solamente, quando successivamente accedi all'oggetto myCalendar e gli chiedi qualcosa, lui ti risponde in modo "consistente"... e quindi siccome giorno/mese/anno sono impostati a 28 dicembre 2006, ti rispondera' sempre dicendo che il day_of_the_week e' giovedi'.

    sto andando a intuito basandomi su quanto c'e' scritto nei post precedenti, non ho controllato... spero di essere stato d'aiuto

  6. #6
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    Tra l'altro, i campi DAY partono da SUNDAY = 1 e vanno a SATURDAY = 7, ecco un altro possibile motivo di errore (visto che tu setti i giorni a partire da MONDAY = 0)
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  7. #7
    Utente di HTML.it
    Registrato dal
    Dec 2006
    Messaggi
    22
    :master:
    Il mio compito di partenza era quello di convertire una stringa in formato Date...forse Andrea1979 si ricorda....
    La mia stringa di partenza è :"Wed, 16 Oct 2006 11:00:01"; (per esempio).
    Allora io non potendo usare la classe SimpleDateFormat ho dovuto agire diversamenet ovvero ho creato 7 stringhe(day_week, giorno,...., secondi), le ho convertite in interi e poi ho creato un oggetto calendario, settando i vari "campi" con i valori appropriati e quindi ho creato l'oggetto Date relativo a quel Calendar.
    N.B.: Per quanto riguardo il mese e il giorno della settiman il discorso è diverso, lì ho eseguito un ciclo for per farmeli riconoscere come interi.
    E' così ho fatto....solo che per il mese è andato tutto ok....mentre per il day_of_week NO!!!(vedi codice precedente)!!!
    ............
    se io poi scrivo la seguente riga di codice:

    System.out.println(myCalendar.get(Calendar.DAY_OF_ WEEK));

    il valore d'uscita nn corrisponde con quello da me impostato....

  8. #8
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    Ah, ora ricordo! Eri quello con la j2me, vero?
    codice:
    import java.util.*;
    
    public class j2meDate {
      
      public j2meDate(String date) {
        String[] temp = date.split(",");
        String noDay = temp[1].trim();
        String[] daymonthyearhour = noDay.split(" ");
        int day = Integer.parseInt(daymonthyearhour[0].trim());
        String month = daymonthyearhour[1].trim();
        String[] months = {"Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"};
        int mon = 0;
        while (!months[mon].equals(month)) {
          mon++;
        }
        int year = Integer.parseInt(daymonthyearhour[2].trim());
        String[] hms = daymonthyearhour[3].trim().split(":");
        int hour = Integer.parseInt(hms[0].trim());
        int minute = Integer.parseInt(hms[1].trim());
        int second = Integer.parseInt(hms[2].trim());
        
        Calendar myCalendar = Calendar.getInstance();
        myCalendar.set(Calendar.YEAR, year);
        myCalendar.set(Calendar.MONTH, mon);
        myCalendar.set(Calendar.DAY_OF_MONTH, day);
        myCalendar.set(Calendar.HOUR, hour);
        myCalendar.set(Calendar.MINUTE, minute);
        myCalendar.set(Calendar.SECOND, second);
        
        System.out.println(myCalendar.getTime());
      }
      
      public static void main (String[] args) {
        j2meDate j2 = new j2meDate("Wed, 16 Oct 2006 11:00:01");
      }
    }
    PS: il 16 Ottobre 2006 non era un Mercoledì, bensì un lunedì. Ed infatti, se fai andare quest'esempio, l'uscita è proprio un Lunedì.
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.