Visualizzazione dei risultati da 1 a 6 su 6
  1. #1
    Utente di HTML.it L'avatar di citrus
    Registrato dal
    Feb 2002
    Messaggi
    774

    [java] consiglio su classe che estende Date

    ciao,
    devo usare la classe Date però avrei bisogno di costruire date secondo un formato che stabilisco io.
    quindi per non dover ogni volta far intervenire la classe SimpleDateFormat ho riscritto una mia classe che estende Date.
    la classe funziona ma non sono sicuro di aver fatto una cosa corretta dal punto di vista della "buona programmazione".
    potete consigliarmi? (date voi un giudizio)
    grazie!



    import java.text.*;
    import java.util.*;

    class MyDate extends Date{
    // CAMPI
    private Date data;
    public static String pattern="dd/MM/yyyy KK:mm:ss aa";

    // COSTRUTTORI
    public MyDate(String s) throws ParseException{
    SimpleDateFormat formatter= new SimpleDateFormat(pattern);
    data = formatter.parse(s);
    }

    public MyDate() throws ParseException{
    this(new SimpleDateFormat(pattern).format(new Date()));
    }


    // METODI
    public static void ChangePattern(String s){
    pattern=s;
    }

    public String toString(){
    return new SimpleDateFormat(pattern).format(data);
    }
    }

  2. #2
    Utente di HTML.it L'avatar di citrus
    Registrato dal
    Feb 2002
    Messaggi
    774
    un altra cosa:
    avrei bisogno di un terzo costruttore che crea una data di sistema (sempre con il mio formato) però con l'ora impostata alle 00:00:00!
    il problema è che non posso scriverne un'altro senza argomenti perchè così adombrerei il secondo giusto?
    (o comunque creerebbe casini)
    l'idea sarebba quella di scrivere un metodo che ritorna una stringa con la data che mi serve per poi inviarla al primo costruttore
    però mi sembra un po' contorto...
    non c'è una strada migliore?

  3. #3
    Utente di HTML.it L'avatar di citrus
    Registrato dal
    Feb 2002
    Messaggi
    774
    quali sono i campi della classe Date??
    nella documentazione non trovo nulla!
    è giusto avere un campo di tipo Date in una classe che estende Date???
    (sto andando in pallone aiuto!!!)

  4. #4
    Utente di HTML.it L'avatar di anx721
    Registrato dal
    Apr 2003
    Messaggi
    2,352
    Se nelle API non sono specificati i campi della classe Date significa che sono campi privati e che quindi non pui itulizzarenella tua classe estesa. Il dichiarare un campo Date all'interno di una classe che estende Date non è sbagliato, anzi esiste un pattern di programmazione che modella questa circostanza (pattern Decorator); prova anche a dare uno sguardo alla classe Calendar, che pare essere consigliata rispetto a Date, che tra l'altro ha quasi tutti i metodi deprecati,

    ciao.

  5. #5
    per come la vedo io basterebbe qualcosa del genere:
    codice:
    public class MyDate{
       
       private Date data;
       private String pattern = DEFAULT_PATTERN;
    
       public MyDate(String data){
          super();
          this.data = parse(data, this.getPattern());   
       }
    
       public MyDate(String data, String pattern){
          super();
          this.pattern = pattern;
          this.data = parse(data, this.getPattern());
       }
       
       private Date parse(String data, String pattern){
           Date d = null;
           try{
              d = DateUtils.parse(data, pattern);
           }catch(Exception e){}
           return d;
       }
    
       public String toString(){
          return this.date.toString();
       }
    }
    
    
    public class DateUtils{
    
       public static Date parse(String data, String pattern){
           [...]
       }
       public static String parse(String data, String pattern){
           [...]
       }
    
    }
    La classe DateUtils dovrebbe fornire metodi statici per la formattazione, dando una maggiore "astrazione" rispetto a ..DateFormat e centralizzando l'operazione.
    La classe MyDate non ha la necessità di estendere Date .. semplicemente potrebbe dichiararne una.
    Il pattern potrebbe essere impostato come default e potrebbero esserci metodi per settarlo successivamente a seconda delle esigenze.
    Sarebbe carino definire i pattern come proprietà statiche su DateUtils, così da avere riferimenti più chiari e centralizzare del tutto la gestione delle date.
    Sovrascrivendo il toString() potresti gia tornare la data parserizzata nel formato stringa.
    Le eccezioni gestiscile come meglio credi, io ho implementato solo un try-catch "simbolico".

    ps: il codice l'ho proprio buttato giù in modo sbrigativo, scusa ev. errori.Tra Date e Calendar è meglio Calendar, ma se non devi fare utilizzi particolari...ti puoi accontentare ancora per qualche versione di Date
    ► ☺ ◄

  6. #6
    Utente di HTML.it L'avatar di citrus
    Registrato dal
    Feb 2002
    Messaggi
    774
    ok mi avete tolto parecchi dubbi ...
    alla fine ho cercato di mantenere la mia versione integrandola con i vostri consigli (penso di aver fatto un buon lavoro).
    la classe MyDate estende cmq Date perchè mi serve ereditare alcuni metodi che poi mi serviranno (per esempio compareTo() ecc...)
    ...
    direi che dovrei essere apposto...
    se dovessi aver bisogno cmq mi faccio sentire! :bubu:

    grazie ancora a tutti!
    (sopratutto a patrix!)

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 © 2024 vBulletin Solutions, Inc. All rights reserved.