Ich möchte die dazwischen liegenden Tage berechnen zwischen zwei Daten (heutiges Datum und Publikationsdatum) berechnen und gehe in den ersten Schritten wie folgt vor:
Für die letzte Zeile "cal2.set ... " kriege ich aber eine Fehlermeldung - und ich weiss nicht warum. Settime fordert doch ein Date-Objekt als Parameter - also was läuft da schief...?
Gruss, BerndBrot
Sollte keinen Unterscheid machen, da java.sql.Date von java.util.Date erbt. Ich tippe ehr auf eine NPE weil publicationDate null ist , aber die Fehlermeldung wäre wirklich hilfreich.
wie gesagt: keinen Code direkt in eine Klasse,
zumal bei diesen drei Zeilen direkt hintereinander lendingDate doch immer null sein muss,
gäbe wieder eine NullPointerException wie oben, falls nicht vom Compiler bereits verhindert
Nein, der zweite Code ist in einer Methode,und die Fehlermeldung kommt dennoch:
Java:
package buch;importjava.util.*;/**
*
* @author BerndBrot
*/publicclassBuch{// protected attributes --------------------------------------// The id of the book in the library catalogueprotectedint id;// The isbn of the bookprotectedString isbn;// The title of the bookprotectedString title;// The author of the bookprotectedString author;// The date when the book was publishedprotectedDate publicationDate;// The date when the book was lendedprotectedDate lendingDate;// Status of the book: is it lended right now?protectedboolean lended;publicintgetId(){return id;}publicStringgetIsbn(){return isbn;}publicStringgetTitle(){return title;}publicStringgetAuthor(){return author;}publicDategetPublicationDate(){return publicationDate;}publicDategetLendingDate(){return lendingDate;}publicbooleangetLended(){return lended;}publicvoidsetIsbn(String i){
isbn = i;}publicvoidsetTitle(String t){
title = t;}publicvoidsetAuthor(String s){
author = s;}publicvoidsetPublicationDate(Date d){
publicationDate = d;}publicvoidsetLendingDate(Date l){
lendingDate = l;}publicvoidsetGetLended(boolean b){
lended = b;}publicintage(){Calendar cal1 =newGregorianCalendar();Calendar cal2 =newGregorianCalendar();Date xyz =newDate();
cal2.setTime(publicationDate);return0;}publicDatereturnDate(){Date date2 =newDate();
date 2=(lendingDate.getTime()+1000*60*24*30);// + 30 Tage returnnewDate();}}
lendingDate.getTime() ist offensichtlich ein long, kann man in der API nachschauen
1000 * 60 * 24 * 30 ist eher ein int als ein long, aber spätestens durch das + wird
aus long + long doch gewiss ein long und kein Date
in eine Date-Variable kannst du kein long reinschreiben?!
innerhalb einer Klasse in einer nichtstatischen Methode befindet man sich quasi 'in einem Objekt',
dort kann man ohne weiteres auf eigene und geerbte Methoden und Attribute zugreifen,
etwas deutlicher wirds noch mit
return this.datetoString(publicationDate);
statische Methoden/ Attribute genauso, auch von statischen Methoden innerhalb einer Klasse aus,
dort aber besser mit Klassennamen:
return Klassenname.statischeMethode(parameter);