|
| Datoer!? Fra : Allan Schuster Bach |
Dato : 28-03-03 23:13 |
|
Jeg har noget kode i JSP som nedenstående:
int Datotal = Integer.parseInt(request.getParameter("dato"));
GregorianCalendar c = new GregorianCalendar();
SQL = SQL + c.add(Calendar.DATE, Datotal) + "','";
Hele min ide er, at jeg modtager et tal, som skal være repræsentere x antal
dage ud i fremtiden. Jeg vil så lægge det til dags dato. Men jeg kan
simpelhen ikke gemmeskue, hvad jeg gør forkert. Jeg få nedenstående fejl
C:\Program Files\Apache Group\Tomcat
4.1\work\Standalone\localhost\wsp\_admin\behandledata_jsp.java:133: 'void'
type not allowed here
SQL = SQL + c.add(Calendar.DATE, Datotal) + "','";
^
1 error
Håber at der er en der kan hjælpe mig videre
Allan Bach
| |
Jonathan Stein (28-03-2003)
| Kommentar Fra : Jonathan Stein |
Dato : 28-03-03 23:29 |
|
Allan Schuster Bach wrote:
> 4.1\work\Standalone\localhost\wsp\_admin\behandledata_jsp.java:133: 'void'
> type not allowed here
> SQL = SQL + c.add(Calendar.DATE, Datotal) + "','";
Calendar's add-metode returnerer ikke noget. Prøv:
c.add(Calendar.DATE, Datotal);
java.sql.Date sql_date = new java.sql.Date(c.getTimeInMillis());
SQL = SQL + sql_date.toString() + ...
M.v.h.
Jonathan
--
Nyt alternativ til egen server: JSP Enterprise hotel med adgang til
Enterprise Java Beans, egen Java Virtual Machine og egen IP-adresse
(giver mulighed for eget SSL-certifikat).
http://www.jsp-hotel.dk/
| |
Allan Schuster Bach (30-03-2003)
| Kommentar Fra : Allan Schuster Bach |
Dato : 30-03-03 11:12 |
|
> Calendar's add-metode returnerer ikke noget. Prøv:
>
> c.add(Calendar.DATE, Datotal);
> java.sql.Date sql_date = new java.sql.Date(c.getTimeInMillis());
> SQL = SQL + sql_date.toString() + ...
>
Hmm, det kan jeg heller ikke få tl at virke.
I mit farvorit sprog (VB varianter) ville man cirka sådan her
date() som er dagsdato
x som er antal dage frem i tiden
SQL = SQL & (date() + x) & ...
det kan man tilsyneladen ikke i java.
Spørgsmålet er meget simplet, men løsningen tilsyneladen meget svær.
Hvordan kan jeg lægge x antal dage til dagsdato i jave, og få det til at
spille sammen med at lægge dette ind i en SQL sætning
Allan Bach
| |
Thorbjoern Ravn Ande~ (30-03-2003)
| Kommentar Fra : Thorbjoern Ravn Ande~ |
Dato : 30-03-03 12:54 |
|
"Allan Schuster Bach" <newskonto@schuster.dk> writes:
> Hvordan kan jeg lægge x antal dage til dagsdato i jave, og få det til at
> spille sammen med at lægge dette ind i en SQL sætning
Gå via en Calendar.
--
Thorbjørn Ravn Andersen
http://unixsnedkeren.dk/ravn
| |
Allan Schuster Bach (30-03-2003)
| Kommentar Fra : Allan Schuster Bach |
Dato : 30-03-03 13:09 |
|
> Gå via en Calendar.
Ja tak, men hvordan?
I mit første indlæg har jeg netop
int Datotal = Integer.parseInt(request.getParameter("dato"));
GregorianCalendar c = new GregorianCalendar();
SQL = SQL + c.add(Calendar.DATE, Datotal) + "','";
Men c.add(Calendar.DATE, Datotal) retuner void, og så er jeg sgu lige vidt.
Jeg kan simplehen ikke fatte hvordan Java behandler datoer.
Så hvis du har en hurtig frisk opskrift på mit problem, så modtager jeg den
gerne, for nu har jeg være låst fast i et par dage med mit skoleprojekt, og
det er sgu surt at bruge sin tid, på noget som i principet skulle være
simplet, men hvor man ikke har set lyset endnu
Allan Bach
| |
Thorbjoern Ravn Ande~ (30-03-2003)
| Kommentar Fra : Thorbjoern Ravn Ande~ |
Dato : 30-03-03 13:39 |
|
"Allan Schuster Bach" <newskonto@schuster.dk> writes:
> Men c.add(Calendar.DATE, Datotal) retuner void, og så er jeg sgu lige vidt.
Du skal færdigbehandle dit "c" objekt, og herefter trække tiden ud.
Så vidt jeg kan se (jeg har ikke brugt Calendar længe) er det
computeTime() du skal bruge til at få en tid i millisekunder. Denne
skulle du gerne kunne lave en java.sql.DateTime ud fra.
--
Thorbjørn Ravn Andersen
http://unixsnedkeren.dk/ravn
| |
Allan Schuster Bach (30-03-2003)
| Kommentar Fra : Allan Schuster Bach |
Dato : 30-03-03 14:00 |
|
> > Men c.add(Calendar.DATE, Datotal) retuner void, og så er jeg sgu lige
vidt.
>
> Du skal færdigbehandle dit "c" objekt, og herefter trække tiden ud.
Se så tabte du mig igen. Hvordan færdig behandle "c"?
> Så vidt jeg kan se (jeg har ikke brugt Calendar længe) er det
> computeTime() du skal bruge til at få en tid i millisekunder.
Hvorfor skal jeg havde det i millisekunder?
Jeg er fuldstændig lost in Java lige nu, så lidt konkret hjælp er MEGET
velkommen
Allan Bach
| |
Thorbjoern Ravn Ande~ (30-03-2003)
| Kommentar Fra : Thorbjoern Ravn Ande~ |
Dato : 30-03-03 14:21 |
|
"Allan Schuster Bach" <newskonto@schuster.dk> writes:
> > > Men c.add(Calendar.DATE, Datotal) retuner void, og så er jeg sgu lige
> vidt.
> >
> > Du skal færdigbehandle dit "c" objekt, og herefter trække tiden ud.
>
> Se så tabte du mig igen. Hvordan færdig behandle "c"?
Du laver et Calendar objekt, dit hedder c.
Det gør du ting med, fx kalder add osv osv.
Når du er færdig med at beregne da trækker du resultatet ud.
> > Så vidt jeg kan se (jeg har ikke brugt Calendar længe) er det
> > computeTime() du skal bruge til at få en tid i millisekunder.
>
> Hvorfor skal jeg havde det i millisekunder?
Fordi - så vidt jeg husker - tager java.sql.TimeStamp (som du
formentlig gerne vil bruge til det her) et antal millisekunder som
constructorargument.
Har I slet ikke fået noget materiale til jeres opgave?
--
Thorbjørn Ravn Andersen
http://unixsnedkeren.dk/ravn
| |
Allan Schuster Bach (30-03-2003)
| Kommentar Fra : Allan Schuster Bach |
Dato : 30-03-03 14:59 |
|
Min løsning blev følgende
int Datotal = Integer.parseInt(request.getParameter("dato"));
GregorianCalendar c = new GregorianCalendar();
c.add(Calendar.DATE, Datotal);
SQL = SQL + c.get(Calendar.DATE) + "-" + (c.get(Calendar.MONTH) + 1) + "-" +
c.get(Calendar.YEAR) + "')";
Køn er det ikke, men det virker
> Har I slet ikke fået noget materiale til jeres opgave?
Jo, men kun om hvordan men bruger datoer (alt hvilken dag det er i dag,
tiden og så videre alt det basale, men intet om hvordan man "manipulere" med
datoer)
Allan Bach
| |
Anders K. Olsen (30-03-2003)
| Kommentar Fra : Anders K. Olsen |
Dato : 30-03-03 14:46 |
|
"Allan Schuster Bach" <newskonto@schuster.dk> skrev i en meddelelse
news:b66mpo$20b0$1@news.cybercity.dk...
> Så hvis du har en hurtig frisk opskrift på mit problem, så modtager jeg
den
> gerne, for nu har jeg være låst fast i et par dage med mit skoleprojekt,
og
> det er sgu surt at bruge sin tid, på noget som i principet skulle være
> simplet, men hvor man ikke har set lyset endnu
Er problemet, at du ikke er så god til engelsk, eller at du ikke kender til
Javadoc? Har du prøvet at kikke på:
http://java.sun.com/j2se/1.4.1/docs/api/, og herefter finde frem til
Calender klassen? Her kan du finde en udemærket vejledning i hvordan du
arbejder med et Calender objekt, specielt vil det afsnit der handler om
"Field manipulation methods" nok kunne give dig en god hjælp.
/Anders
| |
Allan Schuster Bach (30-03-2003)
| Kommentar Fra : Allan Schuster Bach |
Dato : 30-03-03 15:09 |
|
> Er problemet, at du ikke er så god til engelsk, eller at du ikke kender
til
> Javadoc?
Ingen af delene. Problemet er jeg at ikke fatter hvordan Java behandler
datoer
Har du prøvet at kikke på:
> http://java.sun.com/j2se/1.4.1/docs/api/, og herefter finde frem til
> Calender klassen? Her kan du finde en udemærket vejledning i hvordan du
> arbejder med et Calender objekt, specielt vil det afsnit der handler om
> "Field manipulation methods" nok kunne give dig en god hjælp.
Syndes du selv at den dokumentation der ligger på det link, er nemt at finde
rundt i?
Allan Bach
| |
Thomas Møller (30-03-2003)
| Kommentar Fra : Thomas Møller |
Dato : 30-03-03 16:09 |
|
> Syndes du selv at den dokumentation der ligger på det link, er nemt at
finde
> rundt i?
Det er rigtigt at det virker ret uoverskueligt i begyndelsen. Det syntes jeg
også selv, da jeg startede. Så snart du lærer de forskellige pakker at
kende, bliver den side uundværlig.
| |
Allan Schuster Bach (30-03-2003)
| Kommentar Fra : Allan Schuster Bach |
Dato : 30-03-03 16:27 |
|
> Det er rigtigt at det virker ret uoverskueligt i begyndelsen. Det syntes
jeg
> også selv, da jeg startede. Så snart du lærer de forskellige pakker at
> kende, bliver den side uundværlig.
Det er jeg slet ikke i tvivl om, Thomas. Men for en begynder som kun har
arbejdet med Java i sammenlagt 14 dage, er jeg efter min egen opfattelse
kommet ret langt. Problemet er bare, hvad for en af de forskellige pakker
skal man kikke i.
Allan Bach
| |
Soren Davidsen (30-03-2003)
| Kommentar Fra : Soren Davidsen |
Dato : 30-03-03 19:33 |
|
"Allan Schuster Bach" <newskonto@schuster.dk> writes:
> > Er problemet, at du ikke er så god til engelsk, eller at du ikke kender
> til
> > Javadoc?
>
> Ingen af delene. Problemet er jeg at ikke fatter hvordan Java behandler
> datoer
Calendar.add er en manipulations funktion, den manipulerer det objekt
du arbejder paa, istedet for at returnere et nyt objekt med din angivne
manipulation. Hvordan fungerer 'dato' objekter i VB som du snakkede om?
Hvis de er immutable giver det god mening at returnere et nyt manipuleret
objekt, men det er Calendar objekter i Java altsaa ikke .
Her er noget konkret som de andre har hintet af indtil videre, du kan ogsaa
se paa java.sql.Timestamp hvis det er et sql timestamp du skal bruge
istedet:
// hent current-time.
java.util.Calendar cal = new java.util.GregorianCalendar();
// tilfoej 5 dage.
cal.add(cal.DAY_OF_MONTH, 5);
// lav et java.sql.Date
java.sql.Date sqlDate = new java.sql.Date(cal.getTimeInMillis());
// se om vi har hvad du skal bruge.
System.out.println("sqldate: " + sqlDate.toString());
> Har du prøvet at kikke på:
> > http://java.sun.com/j2se/1.4.1/docs/api/, og herefter finde frem til
> > Calender klassen? Her kan du finde en udemærket vejledning i hvordan du
> > arbejder med et Calender objekt, specielt vil det afsnit der handler om
> > "Field manipulation methods" nok kunne give dig en god hjælp.
>
> Syndes du selv at den dokumentation der ligger på det link, er nemt at finde
> rundt i?
Javadoc er en central del af Java, ligesom at kende klasse-biblioteket
ogsaa er en af de foerste guidelines til at laere Jave. Hvis du ikke
oensker at laere at bruge det, no offence, maa du hellere finde et
andet sprog og laere .
Mvh,
--
___
Soren Davidsen / o\
Math student, ICSMA (_____)
__ http://www.tanesha.net/ _________________________________(___)_______
| |
Casper Lund Thomsen (31-03-2003)
| Kommentar Fra : Casper Lund Thomsen |
Dato : 31-03-03 09:43 |
|
Allan Schuster Bach wrote:
[SNIP]
> Syndes du selv at den dokumentation der ligger på det link, er nemt at finde
> rundt i?
Man kunne jo proeve at soege i de tre frames der er efter ordet
Calendar, hvilket giver pote i den nederste frame til venstre.
Mvh
Casper
--
----------------------------------------------------------
Casper Lund Thomsen | Tlf Mobil
Paluden Mullers Vej 44, 2s., lejl. 22 | 77890330 40557274
8200 Århus N |
----------------------------------------------------------
| |
Jonathan Stein (30-03-2003)
| Kommentar Fra : Jonathan Stein |
Dato : 30-03-03 14:42 |
|
Allan Schuster Bach wrote:
> > Calendar's add-metode returnerer ikke noget. Prøv:
> >
> > c.add(Calendar.DATE, Datotal);
> > java.sql.Date sql_date = new java.sql.Date(c.getTimeInMillis());
> > SQL = SQL + sql_date.toString() + ...
>
> Hmm, det kan jeg heller ikke få tl at virke.
Du slipper nok ikke for at læse lidt på Calendar-objektet og evt. på
java.sql.Timestamp. Calendar kan _alt_, men det er måske ikke det aller
letteste at gå til.
Hvis nogen skal komme med et kvalificeret gæt, er du nok også nødt til at
skrive lidt mere end at du ikke kan få det til at virke. Hvad går galt?
Hvilke fejl får du? Hvordan ser din SQL-variabel ud, når der sender den til
databasen?
> SQL = SQL & (date() + x) & ...
Hvad indeholder date() i dette eksempel? java.sql.Date.toString()
indeholder hele datoen (f.eks. "2003-03-30"). Hvis du kun skal bruge "30",
kan du springe Date-objektet over og bruge:
c.add(Calendar.DATE, Datotal);
SQL = SQL + c.get(Calendar.DAY_OF_MONTH) + ...
- men så skal du selv holde styr på, om du er kommet ind i en ny måned og
evt. et nyt år.
Calendar holder selv styr på, at når du lægger 3 dage til 2003-03-30,
kommer du ind i april og havner på 2003-04-02.
M.v.h.
Jonathan
--
Nyt alternativ til egen server: JSP Enterprise hotel med adgang til
Enterprise Java Beans, egen Java Virtual Machine og egen IP-adresse
(giver mulighed for eget SSL-certifikat).
http://www.jsp-hotel.dk/
| |
Allan Schuster Bach (30-03-2003)
| Kommentar Fra : Allan Schuster Bach |
Dato : 30-03-03 15:16 |
|
> Du slipper nok ikke for at læse lidt på Calendar-objektet og evt. på
> java.sql.Timestamp. Calendar kan _alt_, men det er måske ikke det aller
> letteste at gå til.
Jeg skal ikke bruge et Timestamp, men bare en dato hvor der er lagt et antal
dage til
> Hvis nogen skal komme med et kvalificeret gæt, er du nok også nødt til
at
> skrive lidt mere end at du ikke kan få det til at virke. Hvad går galt?
> Hvilke fejl får du? Hvordan ser din SQL-variabel ud, når der sender den
til
> databasen?
>
> > SQL = SQL & (date() + x) & ...
> Hvad indeholder date() i dette eksempel? java.sql.Date.toString()
> indeholder hele datoen (f.eks. "2003-03-30"). Hvis du kun skal bruge "30",
> kan du springe Date-objektet over og bruge:
Ovenstående var fra ASP hvor man har et dato objekt date() som jeg så kan
lægge et antal dage på ved hjælp af + x, hvor x er antal dage frem i tiden.
Dette vil så give mig en dato, og kun en dato og intet andet.
> c.add(Calendar.DATE, Datotal);
> SQL = SQL + c.get(Calendar.DAY_OF_MONTH) + ...
>
> - men så skal du selv holde styr på, om du er kommet ind i en ny måned og
> evt. et nyt år.
> Calendar holder selv styr på, at når du lægger 3 dage til 2003-03-30,
> kommer du ind i april og havner på 2003-04-02.
Mit eksempel fra ASP holder også styr på at månede og årsskift, uden
problemer. Så ja, det er lige den løsning jeg har brug for. Men jeg kan
tilsyneladende ikke finde ud af, at aflæse mit objekt korrekt
Allan Bach
| |
Jonathan Stein (30-03-2003)
| Kommentar Fra : Jonathan Stein |
Dato : 30-03-03 15:50 |
|
Allan Schuster Bach wrote:
> > Du slipper nok ikke for at læse lidt på Calendar-objektet og evt. på
> > java.sql.Timestamp. Calendar kan _alt_, men det er måske ikke det aller
> > letteste at gå til.
>
> Jeg skal ikke bruge et Timestamp, men bare en dato hvor der er lagt et antal
> dage til
Nej, hvis du kun skal bruge datoen og ikke tidspunktet, er et java.sql.Date
objekt mere relevant.
Du har stadig ikke fortalt hvad problemet var med de(n) løsning(er), du ikke
fik til at virke.
> > > SQL = SQL & (date() + x) & ...
>
> Ovenstående var fra ASP hvor man har et dato objekt date() som jeg så kan
> lægge et antal dage på ved hjælp af + x, hvor x er antal dage frem i tiden.
Hvordan ved ASP, at x er dage og ikke f.eks. timer eller måneder? Nå, det er
en anden snak.
> Mit eksempel fra ASP holder også styr på at månede og årsskift, uden
> problemer. Så ja, det er lige den løsning jeg har brug for. Men jeg kan
> tilsyneladende ikke finde ud af, at aflæse mit objekt korrekt
Det tror jeg du har ret i. Som du selv har fundet ud af, kan du hive hvert
felt ud af din Calendar, men du får det hele forærende med et
java.sql.Date-objekt, da toString() metoden netop formaterer datoen som du
ønsker det.
En "long" variabel med tiden i millisekunder er standard-måden at udveksle
tid/dato mellem forskellige objekter, og derfor kan du bruge
Calendar.getTimeInMillis() til at initialisere et Date-objekt:
java.sql.Date sql_date = new java.sql.Date(c.getTimeInMillis());
- hvis det ikke virker for dig, tror jeg du indsætter forkert i SQL-variablen.
Brugte du bare linjen "SQL = SQL + sql_date.toString() + ..." eller rettede du
den til efter din kode?
M.v.h.
Jonathan
--
Nyt alternativ til egen server: JSP Enterprise hotel med adgang til
Enterprise Java Beans, egen Java Virtual Machine og egen IP-adresse
(giver mulighed for eget SSL-certifikat).
http://www.jsp-hotel.dk/
| |
Allan Schuster Bach (30-03-2003)
| Kommentar Fra : Allan Schuster Bach |
Dato : 30-03-03 16:23 |
|
Baggrund
Jeg har en side som sender en formular over til en *.jsp fil. Der er i
formularen en downdownboks hvor man kan angive et antal dage, som
"objektet/teksten" skal være synlig. Ideen var så at tage det antal dage og
lægge dem dem til dagsdato
> Nej, hvis du kun skal bruge datoen og ikke tidspunktet, er et
java.sql.Date
> objekt mere relevant.
> Du har stadig ikke fortalt hvad problemet var med de(n) løsning(er), du
ikke
> fik til at virke.
Problerme var mange, for jeg har prøvet mange forskellige muligheder. Det
størreste problem var, at jeg ikke kunne få c (altså mit objekt) til at
retuner en dato jeg kunne bruge
> Hvordan ved ASP, at x er dage og ikke f.eks. timer eller måneder? Nå,
det er
> en anden snak.
Lidt OT snak
Lige som i Java er der i ASp en lang række af forskellige objekter man kan
benytte
Date() indeholder dato uden tid
Time() indeholder tiden i timer:minutter:sekunder:milisekunder
hvis man gør sådan her
nydato = date() + 4 vil nydato være dagsdato puls 4 dage, altså den 4. april
> Det tror jeg du har ret i. Som du selv har fundet ud af, kan du hive
hvert
> felt ud af din Calendar, men du får det hele forærende med et
> java.sql.Date-objekt, da toString() metoden netop formaterer datoen som du
> ønsker det.
Det har jeg også forsøgt, men så fik jeg kun dagen og manglede således både
månede og år
> En "long" variabel med tiden i millisekunder er standard-måden at
udveksle
> tid/dato mellem forskellige objekter, og derfor kan du bruge
> Calendar.getTimeInMillis() til at initialisere et Date-objekt:
> java.sql.Date sql_date = new java.sql.Date(c.getTimeInMillis());
>
> - hvis det ikke virker for dig, tror jeg du indsætter forkert i
SQL-variablen.
> Brugte du bare linjen "SQL = SQL + sql_date.toString() + ..." eller
rettede du
> den til efter din kode?
Rette den til efter min kode. Jeg har på nuværende tidspunkt ikke sendt min
SQL til databasen, for mit resultat er ikke som forventet, idet at jeg har
et datofelt i tabellen på min MS SQL server. Den løsning jeg har fundet frem
til virker nu, men det er godt nok "grim". Men hvis du lægger inde med en
rigtig god ide til hvordan jeg kan løse det pænt, så er jeg klar.
Allan Bach
| |
Jonathan Stein (30-03-2003)
| Kommentar Fra : Jonathan Stein |
Dato : 30-03-03 16:44 |
|
Allan Schuster Bach wrote:
> ... Den løsning jeg har fundet frem
> til virker nu, men det er godt nok "grim". Men hvis du lægger inde med en
> rigtig god ide til hvordan jeg kan løse det pænt, så er jeg klar.
Hvis du kun har arbejdet med Java i 14 dage, har du måske kastet dig ud i lidt
vel rigeligt på én gang. Jeg har prøvet at isolere eksemplet:
import java.util.*;
public class test {
public static void main (String argv[]) {
Calendar c = new GregorianCalendar(); // c initialiseres til dags dato
int Datotal = 5;
c.add(Calendar.DATE, Datotal); // c sættes 5 dage frem
java.sql.Date sql_date = new java.sql.Date(c.getTimeInMillis());
String SQL = "SELECT * FROM tabel WHERE dato='";
SQL = SQL + sql_date.toString() + "'";
System.out.println(SQL);
}
}
- pas på du ikke blander java.util.Date og java.sql.Date sammen - hvis du
importerer java.util.*, skal du altid referere specifikt til java.sql.Date for
ikke at få det forkerte objekt!
M.v.h.
Jonathan
--
Nyt alternativ til egen server: JSP Enterprise hotel med adgang til
Enterprise Java Beans, egen Java Virtual Machine og egen IP-adresse
(giver mulighed for eget SSL-certifikat).
http://www.jsp-hotel.dk/
| |
Jonathan Stein (30-03-2003)
| Kommentar Fra : Jonathan Stein |
Dato : 30-03-03 16:49 |
|
Jonathan Stein wrote:
> Hvis du kun har arbejdet med Java i 14 dage, har du måske kastet dig ud i lidt
> vel rigeligt på én gang. Jeg har prøvet at isolere eksemplet:
Når du nu arbejder med JSP, kommer eksemplet lige i JSP:
<%
java.util.Calendar c = new java.util.GregorianCalendar();
int Datotal = 5;
c.add(java.util.Calendar.DATE, Datotal); // c sættes 5 dage frem
java.sql.Date sql_date = new java.sql.Date(c.getTimeInMillis());
String SQL = "SELECT * FROM tabel WHERE dato='";
SQL = SQL + sql_date.toString() + "'";
%>
SQL-koden er: <%= SQL %>
M.v.h.
Jonathan
--
Nyt alternativ til egen server: JSP Enterprise hotel med adgang til
Enterprise Java Beans, egen Java Virtual Machine og egen IP-adresse
(giver mulighed for eget SSL-certifikat).
http://www.jsp-hotel.dk/
| |
|
|