Fehlermeldung für Calendar

Status
Nicht offen für weitere Antworten.

BerndBrot

Mitglied
Hallo zusammen,

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:
Java:
(...)

protected Date publicationDate;

Calendar cal1 = new GregorianCalendar();
Calendar cal2 = new GregorianCalendar();
cal2.setTime(publicationDate);

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
 
Zuletzt bearbeitet von einem Moderator:
die Fehlermeldung willst du nicht nennen? Glanzleisung

vielleicht importierst du
java.sql.Date
statt
java.util.Date
 
die Fehlermeldung willst du nicht nennen? Glanzleisung

vielleicht importierst du
java.sql.Date
statt
java.util.Date

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.
 
Die Fehlermeldung(en):

"Create publicationDate class in package Buch" (...?)
"identifier expected"
"Package cal2 does not exist"

Das package in dem ich arbeite heisst "buch"..aber weshalb soll eine klasse publicationDate implementiert werden...?
 
dann solltest du besser die ganze Klasse posten,

steht
> cal2.setTime(publicationDate);
zufällig direkt in der Klasse, nicht in einer Methode oder Konstruktor?
das ist nicht erlaubt
 
Und auch hier eine Fehlermeldung, diesbezüglich, die ich nicht verstehe;

protected Date lendingDate;
Date date2 = new Date();
date 2 = (lendingDate.getTime() + 1000 * 60 * 24 * 30);

Fehlermeldung für die letzte Zeile : "Not a statement"...aber warum?
 
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;
import java.util.*;



/**
 *
 * @author BerndBrot
 */
public class Buch {

 // protected attributes --------------------------------------
	// The id of the book in the library catalogue
	protected int id;
	// The isbn of the book
	protected String isbn;
	// The title of the book
	protected String title;
	// The author of the book
	protected String author;
	// The date when the book was published
	protected Date publicationDate;
	// The date when the book was lended
	protected Date lendingDate;
	// Status of the book: is it lended right now?
	protected boolean lended;




public int getId() {
return id;
}

public String getIsbn() {
return isbn;
}

public String getTitle() {
return title;
}

public String getAuthor() {
return author;
}

public Date getPublicationDate() {
return publicationDate;
}

public Date getLendingDate() {
return lendingDate;
}

public boolean getLended() {
return lended;
}

public void setIsbn(String i) {
isbn = i;
}

public void setTitle(String t) {
title = t;
}

public void setAuthor(String s) {
author = s;
}

public void setPublicationDate(Date d) {
publicationDate = d;
}

public void setLendingDate(Date l) {
lendingDate = l;
}

public void setGetLended(boolean b) {
lended = b;
}
public int age()
{Calendar cal1 = new GregorianCalendar();
Calendar cal2 = new GregorianCalendar();
Date xyz = new Date();
cal2.setTime(publicationDate);
return 0;
}

public Date returnDate()
	{
       Date date2 = new Date();
       date 2 = (lendingDate.getTime() + 1000 * 60 * 24 * 30);
        // + 30 Tage 
		return new Date();
	}





}
 
Zuletzt bearbeitet von einem Moderator:
> date 2 = (lendingDate.getTime() + 1000 * 60 * 24 * 30);

Leerzeichen zwischen date und 2
 
ne, immer noch eine fehlermeldung:
incompatible types
found long
required java.util.Date;

Aber es ist doch ein Date Objekt..%/$§..??
 
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?!
 
nein, eben nicht, sondern ein Date!!! :

" Date / getTime()
Returns a Date object representing this Calendar's time value (millisecond offset from the Epoch")."
 
> Returns a Date object representing this Calendar's time value

das stammt aus Calendar, Calendar.getTime() liefert ein Date

lendingDate ist aber kein Calendar, sondern ein Date, Date.getTime() liefert long 😉

----

selbst wenn getTime() Date zurückliefern würde, dann hättest du ein anderes Problem,
denn auf Date kannst du doch nicht mit + einen long addieren
 
Noch eine (theoretische) letzte Frage:

Ich habe diese Methode zum formatieren:

Java:
private String dateToString(Date d)
{
	SimpleDateFormat fmt = new SimpleDateFormat(DATE_FORMAT);
	return fmt.format(d);
}


Wie kommt es, dass ich sie wie folgt verwenden kann, ohne dass ich ein Objekt instantiiert habe bzw ohne dass ich die Methode auf ein Objekt anwende:

return datetoString(publicationDate);
 
Zuletzt bearbeitet von einem Moderator:
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);
 
oke, war mir nicht sicher, ob das der grund ist.
und noch eine frage:

Java:
public Date returnDate()
{
	long borrowingMillis = ((long) LENDING_DURATION) * 24 * 60 * 60 * 1000; 
	long millis = this.lendingDate.getTime() + borrowingMillis;
	
	Date date1 = new Date(millis);
	return date1;
}

>> Wie kommt es, dass ich im return statement hier ein Date Objekt brauchen könnte, ohne es explizit zu deklarieren? I.e. folgendermassen:

return new Date(millis);

?
 
Zuletzt bearbeitet von einem Moderator:
Status
Nicht offen für weitere Antworten.

Zurück
Oben