PDA

Visualizza la versione completa : [java] consiglio su classe che estende Date


citrus
02-02-2004, 13:53
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);
}
}

citrus
02-02-2004, 14:13
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?

citrus
02-02-2004, 16:19
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!!!)
:dhò:

anx721
02-02-2004, 16:38
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.

patrix03
02-02-2004, 17:33
per come la vedo io basterebbe qualcosa del genere:


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 ;)

citrus
02-02-2004, 18:09
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!)
:D

Loading