PDA

Visualizza la versione completa : [JAVA] JSP: calcolare data partendo da quella odierna


02federico81
05-08-2005, 15:37
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

tonytalk
05-08-2005, 15:50
Prova questo...



long currentDate=System.currentTimeMillis();
long oneDay=1000*60*60*24;//Generati una costante senza calcolare il valore ogni volta int giorni=10;

SimpleDateFormat sdf=new SimpleDateFormat("dd/MM/yyyy");
String result=sdf.format(new Date(currentDate+(oneDay*giorni)));
System.out.println("Data Finale="+result);
result=sdf.format(new Date(currentDate));
System.out.println("Data Iniziale="+result);




Ciao

floyd
05-08-2005, 16:29
così
Calendar date = Calendar.getInstance();
date.add(Calendar.WEEK_OF_YEAR, 2);

02federico81
08-08-2005, 11:54
raga è anche possibile tornare indietro?per esempio ottenere la data della settimana scorsa?grazie 1000

02federico81
08-08-2005, 13:10
ho trovato la soluzione,ovvero basta imporre banalmente negativo il parametro richiesto al metodo sopra citato.però ho un altro problema, ovvero le operazioni fra date,ho un campo date nel db, che segna la data di scadenza di prestiti di libri per un circolo,ora dovrei mandare una email alle persone il cui prestito è scaduto.come faccio?ho provato a mettere nella query la condizione where data>'"+dataodierna+"',ma nn funziona;suggerimenti in merito?grazie

02federico81
09-08-2005, 00:22
niente in merito?

floyd
09-08-2005, 11:34
usa i prepared statement (http://java.sun.com/j2se/1.5.0/docs/api/java/sql/PreparedStatement.html)

02federico81
09-08-2005, 13:41
ho provato con i prepared statement è il risultato è sempre lo stesso:
exception

javax.servlet.ServletException: You have an error in your SQL syntax near '('2008-08-09')' at line 1
org.apache.jasper.runtime.PageContextImpl.doHandle PageException(PageContextImpl.java:825)
org.apache.jasper.runtime.PageContextImpl.handlePa geException(PageContextImpl.java:758)
org.apache.jsp.serverfuso2_jsp._jspService(serverf uso2_jsp.java:113)
org.apache.jasper.runtime.HttpJspBase.service(Http JspBase.java:94)
javax.servlet.http.HttpServlet.service(HttpServlet .java:802)
org.apache.jasper.servlet.JspServletWrapper.servic e(JspServletWrapper.java:324)
org.apache.jasper.servlet.JspServlet.serviceJspFil e(JspServlet.java:292)
org.apache.jasper.servlet.JspServlet.service(JspSe rvlet.java:236)
javax.servlet.http.HttpServlet.service(HttpServlet .java:802)


root cause

java.sql.SQLException: You have an error in your SQL syntax near '('2008-08-09')' at line 1
com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.ja va:2921)
com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:15 70)
com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java :1665)
com.mysql.jdbc.Connection.execSQL(Connection.java: 2978)
com.mysql.jdbc.Connection.execSQL(Connection.java: 2902)
com.mysql.jdbc.PreparedStatement.executeInternal(P reparedStatement.java:930)
com.mysql.jdbc.PreparedStatement.executeQuery(Prep aredStatement.java:1024)
org.apache.jsp.serverfuso2_jsp._jspService(serverf uso2_jsp.java:95)
org.apache.jasper.runtime.HttpJspBase.service(Http JspBase.java:94)
javax.servlet.http.HttpServlet.service(HttpServlet .java:802)
org.apache.jasper.servlet.JspServletWrapper.servic e(JspServletWrapper.java:324)
org.apache.jasper.servlet.JspServlet.serviceJspFil e(JspServlet.java:292)
org.apache.jasper.servlet.JspServlet.service(JspSe rvlet.java:236)
javax.servlet.http.HttpServlet.service(HttpServlet .java:802)

ecco il codice utilizzato:
<%

Calendar dataodierna = Calendar.getInstance();
// rilevo data
int mese_int = dataodierna.get(java.util.Calendar.MONTH);
int anno_int = dataodierna.get(java.util.Calendar.YEAR);
int giorno_int = dataodierna.get(java.util.Calendar.DAY_OF_MONTH);
String mese = new String(""+mese_int);
String anno = new String(""+anno_int);
String giorno = new String(""+giorno_int);
// Carico il driver.
Class.forName(DRIVER);
Connection connessione =DriverManager.getConnection(DB_URL);
int differenza=anno_int-1971;
//data odierna
java.util.Date oggi = new java.util.Date();
long millisecondi_attuali =oggi.getTime();
java.sql.Date dataoggi = new java.sql.Date(millisecondi_attuali);

String email="";
String idopera="";
//----------------
PreparedStatement pstmt = connessione.prepareStatement("SELECT email FROM `prestito vhs` WHERE data.before(?)");
pstmt.setDate(1,dataoggi,dataodierna);

ResultSet rs = pstmt.executeQuery();
// rs will be scrollable, will not show changes made by others,
// and will be updatable
while (rs.next()) { email= rs.getString(1);
}

%>

floyd
09-08-2005, 13:48
mysql credo non abbia una funzione before
fai così
PreparedStatement pstmt = connessione.prepareStatement("SELECT email FROM prestito vhs WHERE data < ?");
pstmt.setTimestmap(1, new Timestamp(dataodierna.getTime()));

02federico81
09-08-2005, 13:58
mi da il seguente errore:
org.apache.jasper.JasperException: Unable to compile class for JSP

An error occurred at line: 21 in the jsp file: /serverfuso2.jsp
Generated servlet error:
C:\Programmi\Apache Software Foundation\Tomcat 5.0\work\Catalina\localhost\test\org\apache\jsp\se rverfuso2_jsp.java:93: cannot find symbol
symbol : constructor Timestamp(java.util.Date)
location: class java.sql.Timestamp
pstmt.setTimestmap(1, new Timestamp(dataodierna.getTime()));

cmq grazie per la disponibilità e per l'aiuto

Loading