View Full Version : [JSP]=gestione date
mercury841
26-11-2005, 22:53
In che modo posso calcolare la data dopo due settimane partendo dalla data odierna?
per esempio se è il giorno 5/08/05
basta sommare 14+5=19/08/05
se invece ne ho 20 devo andare a valutare il mese e fare un riporto,per caso esiste qualcosa di già implementato?grazie
ciao
mercury841
26-11-2005, 23:07
ho fatto in questo modo:
long currentDate=System.currentTimeMillis();
long oneDay=1000*60*60*24;
int giorni=10;
SimpleDateFormat sdf=new SimpleDateFormat("dd/MM/yyyy");
String result=sdf.format(new Date(currentDate+(oneDay*giorni)));
out.println("Fra 10 giorni="+result);
result=sdf.format(new Date(currentDate));
out.println("Oggi="+result);
Esiste un metodo per ricavarmi il giorno(per esempio domenica) dalla data???
ciao
The day-of-week is an integer value where 1 is Sunday, 2 is Monday, ..., and 7 is Saturday
Calendar xmas = new GregorianCalendar(1998, Calendar.DECEMBER, 25);
int dayOfWeek = xmas.get(Calendar.DAY_OF_WEEK); // 6=Friday
Calendar cal = new GregorianCalendar(2003, Calendar.JANUARY, 1);
dayOfWeek = cal.get(Calendar.DAY_OF_WEEK); // 4=Wednesday
NapalM
In che modo posso calcolare la data dopo due settimane partendo dalla data odierna?
per esempio se è il giorno 5/08/05
basta sommare 14+5=19/08/05
se invece ne ho 20 devo andare a valutare il mese e fare un riporto,per caso esiste qualcosa di già implementato?grazie
ciao
Credo che il metodo più corretto sia questo:
TimeZone tz = TimeZone.getTimeZone("Europe/Rome"); // Imposto la zona oraria
GregorianCalendar gc = new GregorianCalendar(tz); // Recupero la data attuale
gc.add(Calendar.DAY_OF_MONTH, 14); // Aggiungo 14 giorni (2 settimane)
// Altri esempi per comprendere meglio
gc.add(Calendar.DAY_OF_MONTH, -14); // Tolgo 14 giorni (2 settimane)
gc.add(Calendar.MONTH, 14); // Aggiungo 14 mesi
gc.add(Calendar.YEAR, -2); // Tolgo 2 anni
Tieni presente che in questo modo la data è calcolata sempre esattamente rispetto all'ora in cui è stata letta dal sistema, e non dalla mezzanotte, per cui quando aggiungi 2 settimane, se ora sono le 23.30 ottieni la data fra due settimane alle 23.30
Non ti serve calcolare i riporti, fa tutto il metodo add. Alla fine leggi normalmente il nuovo giorno, mese, anno.
mercury841
27-11-2005, 10:20
Credo che il metodo più corretto sia questo:
TimeZone tz = TimeZone.getTimeZone("Europe/Rome"); // Imposto la zona oraria
GregorianCalendar gc = new GregorianCalendar(tz); // Recupero la data attuale
gc.add(Calendar.DAY_OF_MONTH, 14); // Aggiungo 14 giorni (2 settimane)
// Altri esempi per comprendere meglio
gc.add(Calendar.DAY_OF_MONTH, -14); // Tolgo 14 giorni (2 settimane)
gc.add(Calendar.MONTH, 14); // Aggiungo 14 mesi
gc.add(Calendar.YEAR, -2); // Tolgo 2 anni
Tieni presente che in questo modo la data è calcolata sempre esattamente rispetto all'ora in cui è stata letta dal sistema, e non dalla mezzanotte, per cui quando aggiungi 2 settimane, se ora sono le 23.30 ottieni la data fra due settimane alle 23.30
Non ti serve calcolare i riporti, fa tutto il metodo add. Alla fine leggi normalmente il nuovo giorno, mese, anno.
1)ma come avevo fatto io prima perchè non andava bene?
2)si può dare un formato al calendario del tipo dd/MM/yyyy?
Ciao e grazie per l'aiuto
1)ma come avevo fatto io prima perchè non andava bene?
Si, andava bene.
Io l'ho sempre usato quel metodo.
Però quello che ti ho detto è più pratico e leggibile, non ti sembra?
Non escludo che poi faccia gli stessi conti passando ai millisecondi, ma dal punto di vista della lettura del codice ti snellisce il tutto.
2)si può dare un formato al calendario del tipo dd/MM/yyyy?
Ciao e grazie per l'aiuto
Penso di si, non saprei dirti.
Io per fare prima ed essere sicuro che non sorgano problemi di localizzazione o altro, mi sono fatto un metodo stupido, che dato un GregorianCalendar gc ti ritorna una stringa:
return gc.get(Calendar.DAY_OF_MONTH)+"/"+(gc.get(Calendar.MONTH)+1)+"/"+gc.get(Calendar.YEAR);
mercury841
27-11-2005, 13:21
Si anche io ho fatto così, anche perchè la data la dovrei inserire in un database.
Ciao e grazie per l'aiuto
Si anche io ho fatto così, anche perchè la data la dovrei inserire in un database.
Ciao e grazie per l'aiuto
Per il database, occhio che anch'io la inserivo "formattata", perchè per mysql andava bene ("2005-11-27") ma questo dava problemi di compatibilità nel caso di porting verso altri DB.
Và bene solo se il tipo del record nel DB è string (cioè, memorizzo la stringa, e non mi interessa gestirla come data).
Altrimenti ti conviene pensare di usare un setDate per scriverla, così è il driver JDB che si occupa della conversione nel formato più opportuno.
Si anche io ho fatto così, anche perchè la data la dovrei inserire in un database.
Ciao e grazie per l'aiuto
Giungo tardi, è evidente che a te non serve... comunque si poteva anche usare un DateFormat, per esempio:
SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
e poi utilizzare
String output = sdf.format(gc.getTime());
mercury841
27-11-2005, 19:17
Per il database, occhio che anch'io la inserivo "formattata", perchè per mysql andava bene ("2005-11-27") ma questo dava problemi di compatibilità nel caso di porting verso altri DB.
Và bene solo se il tipo del record nel DB è string (cioè, memorizzo la stringa, e non mi interessa gestirla come data).
Altrimenti ti conviene pensare di usare un setDate per scriverla, così è il driver JDB che si occupa della conversione nel formato più opportuno.
Ma secondo te per la gestione di una data in un database, cosa mi consiglieresti di usare?Perchè se imposto la data come una stringa, no posso fare dei confronti sulle date. Potrei,invece, pensare di implementare la data come un intero?
Per quanto riguarda setDate, a cosa mi serve?
Ma secondo te per la gestione di una data in un database, cosa mi consiglieresti di usare?Perchè se imposto la data come una stringa, no posso fare dei confronti sulle date. Potrei,invece, pensare di implementare la data come un intero?
Per quanto riguarda setDate, a cosa mi serve?
Se invece di usare Statement per fare le query/update usi PreparedStatement, puoi definire una query parametrizzata del tipo:
pstmt = con.prepareStatement("UPDATE MIA_TABELLA SET DATA_COMPLEANNO=? WHERE LOGIN=?");
pstmt.setDate(1, dataCompleanno);
pstmt.setString(2, "pinok");
pstmt.executeUpdate();
Dove dataCompleanno è un oggetto di tipo java.sql.Date
Questo ti permette di evitare anche problemi con apici e doppi apici nella stringa, che altrimenti dovresti preprocessare con degli escape del tipo:
stmt.executeUpdate("INSERT INTO FRASI_TABLE (FRASE) VALUES ('ecco l\'esempio che volevo')");
Ultimamente uso le date in notazione giapponese per facilitare la portabilità e mantenere le funzioni di ordinamento.
In pratica scrivi degli interi come AAAAMMGG, mi raccomando di usare tutte e 8 le cifre (quindi il 2 febbraio del 2005 diventa 20050202).
In questo modo il numero più grande indica data successiva, più piccolo data precedente.
Ti devi definire solo un paio di metodi, che ti passano da notazione giapponese a una stringa (il formato è rigido, te la cavi con dei substring) e viceversa (per giorno e mese devi verificare che se <10 devi premettere uno 0)
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.