(Arbeitstag-) Calendar - 9 anstatt 24 Stunden

Status
Nicht offen für weitere Antworten.

padkey

Mitglied
Hallo zusammen,

bastle gerade an einem Kalenderprojekt. Der normale Calendar besitzt ja 24 Stunden. Ich brauche jedoch einen Calendar der nur 9 Stunden hat, und von 8 Uhr beginnt und um 17 Uhr endet.
Also einen Kalender für einen Arbeitstag. Gibts sowas? oder wie kann ich die Einstellungen auf den normalen Kalender übertragen/ändern.
Am besten wäre, wenn dieser Calendar, von dem normalen Calendar abgeleitet/wäre.

Vielen Dank

padkey
 

dvullriede

Mitglied
Hallo zusammen,

bastle gerade an einem Kalenderprojekt. Der normale Calendar besitzt ja 24 Stunden. Ich brauche jedoch einen Calendar der nur 9 Stunden hat, und von 8 Uhr beginnt und um 17 Uhr endet.
Also einen Kalender für einen Arbeitstag. Gibts sowas? oder wie kann ich die Einstellungen auf den normalen Kalender übertragen/ändern.
Am besten wäre, wenn dieser Calendar, von dem normalen Calendar abgeleitet/wäre.

Vielen Dank

padkey


Hab mir mal die Kalenderklasse etwas angeschaut. Was du machen könntest, wäre von GregorianCalendar erben und entsprechende Methoden überschreiben oder soweit du die GregorianCalendar-Implementationen nutzen kannst diese einfach mit super.methodenname() durchreichen.

Hier ein Teil der Implementation(natürlich nur ein kleiner Teil sollst ja auch noch was zu tun haben :D)

Soweit ich es geschrieben hab solltest du zumindest nicht mehr durch die roll-Methode über die entsprechend problematischen Stunden rutschen(<8 Uhr und >16 Uhr(es wäre dann möglich 16:59)). Am besten du schaust dir den Source von GregorianCalendar an und wie die Programmierer es dort gemacht haben und passt das ganze entsprechend deinen Bedürfnissen an.

Java:
import java.util.GregorianCalendar;


public class WorkCalendar extends GregorianCalendar 
{
	public WorkCalendar(int year, int month, int day, int hours, int minutes)
	{
		super(year, month, day, hours, minutes);
		
	}

	@Override
	public void add(int field, int amount) 
	{
		super.add(field, amount);
	}

	@Override
	protected void computeFields() {
		super.computeFields();
		
	}

	@Override
	protected void computeTime() {
		super.computeTime();
	}

	@Override
	public int getGreatestMinimum(int field) 
	{
		return super.getGreatestMinimum(field);
		
	}

	@Override
	public int getLeastMaximum(int field) 
	{
		return super.getLeastMaximum(field);
	}

	@Override
	public int getMaximum(int field) 
	{
		//System.out.println(field);
		if(field == GregorianCalendar.HOUR_OF_DAY)
		{
			return 16;
		}
		else if(field == GregorianCalendar.HOUR && this.get(GregorianCalendar.AM_PM)==GregorianCalendar.PM)
		{
			return 7;
		}
		else if(field == GregorianCalendar.HOUR && this.get(GregorianCalendar.AM_PM)==GregorianCalendar.AM)
		{
			return 12;
		}
		return super.getMaximum(field);
	}

	@Override
	public int getMinimum(int field) 
	{
		System.out.println(field);
		if(field == GregorianCalendar.HOUR_OF_DAY || field == GregorianCalendar.HOUR)
		{
			return 9;
		}
		//System.out.println(super.getMinimum(field));
		return super.getMinimum(field);
		
	}

	@Override
	public void roll(int field, boolean up) 
	{
		System.out.println(field);
		System.out.println(up);
		if(field==GregorianCalendar.HOUR_OF_DAY)
		{
			if(up)
			{
				int hod = get(GregorianCalendar.HOUR_OF_DAY);
				if(hod<16)
				{
					this.set(GregorianCalendar.HOUR_OF_DAY, hod+1);
					return;
				}
				else
				{
					return;
				}
			}
			else
			{
				int hod = get(GregorianCalendar.HOUR_OF_DAY);
				if(hod>8)
				{
					this.set(GregorianCalendar.HOUR_OF_DAY, hod-1);
					return;
				}
				else
				{
					return;
				}
			}
		}
		super.roll(field, up);
	}
}
 

padkey

Mitglied
hallo,

jetzt hat sich noch ein problem aufgetan. Wie mach ich den WorkCalendar zu einem Singelton, also dass er über getInstance aufgerufen werden kann.

So etwa:
WorkCalendar wc = (WorkCalendar ) Calendar.getInstance();

jedoch gibt dies eine Fehlermeldung...

Code:
Exception in thread "main" java.lang.Error: Unresolved compilation problem: 
	Type mismatch: cannot convert from GregorianCalendar to WorkCalendar

	at com.fmc.util.WorkCalendar.main(WorkCalendar.java:191)

vllt kann mir jmd helfen... vielen Dank!
 

padkey

Mitglied
okay, verstehen tu ich dieses schon.... nur ich suche eine Lösung, dass ich auch diesen WorkCalendar als Singleton verwenden kann.

ich dachte mir mit:
WorkCalendar wc = (WorkCalendar) GregorianCalendar.getInstance();
würde es eventuell gehen, jedoch
Code:
Exception in thread "main" java.lang.ClassCastException: java.util.GregorianCalendar
	at com.fmc.util.WorkCalendar.main(WorkCalendar.java:192)

Gibt es eine einfach Lösung, wie ich diesen Calendar als Singleton verwenden kann. Dachte dies sollte gehen, da er ja vom GregorianCalendar erbt und dieses ja als Singleton verwendet werden kann.

Vielen Dank für die Bemühungen...
 

Der Müde Joe

Top Contributor
Naja.
WorkCalendar wc = (WorkCalendar ) Calendar.getInstance();

Die statische Methode getInstance der Klasse Calendar gibt halt nen GrgorianCalendar zurück. Ist halt so. Damit musst du leben. Ist kein WorkCalendar und wird auch nie einer werden. Und ist auch kein Singleton!

Java:
public static WorkCalendar getInstance() { return new WorkCalendar();}
//...
WorkCalendar w = WorkCalendar.getInstance();

so in etwa.
 
Zuletzt bearbeitet:

padkey

Mitglied
okay super :) vielen Dank.

Nochmal zum Verständnis:
Code:
WorkCalendar w = WorkCalendar.getInstance();
Nun erhalte ich einen Gregorianischen Kalendar, welcher die überschriebenen Methoden des WorkCalendar hat?

Wieso ist dies kein Singleton? Dachte, alles was über getInstance initialisiert wird, ist ein Singleton?

Gruß und vielen vielen Dank!
 

Der Müde Joe

Top Contributor
>Nun erhalte ich einen Gregorianischen Kalendar, welcher die überschriebenen Methoden des WorkCalendar hat?

Nein. Du erhälst ein neue Instanz (new) bzw neues Objekt der Klasse WorkCalendar, welche die Klasse GregorianCalendar überschreibt (Was ich persönlich hässlich finde).

>Wieso ist dies kein Singleton? Dachte, alles was über getInstance initialisiert wird, ist ein Singleton?

Das hat damit gar nichts zu tun. Ein Sinleton ist ein Pattern, welches nur eine Instanz (einmal new) zulässt. Ob du diese Instanz mit getInstance oder bringMeTheMoney() holst ist egal.

Würde ca so aussehen:
Java:
//einzige Instanz einer Klasse
private static SomeClass cal = new SomeClass();
private SomeClass(){} //private da nicht benutzt werden darf von aussen

public static SomeClass getDieEinzigeInstanzdieserKlasse() { return cal;}

EDIT:
hier nachlesen:
http://de.wikipedia.org/wiki/Singleton_(Entwurfsmuster)
 
Zuletzt bearbeitet:

padkey

Mitglied
achso, okay, vielen dank! jedoch noch ein Problem:

wenn ich dies hier einfüge:
Code:
public static WorkCalendar getInstance() { return new WorkCalendar();}

erhalte ich eine Fehlermeldung:
Code:
The return type is incompatible with Calendar.getInstance()

weißt du noch, wie ich diese Beheben könnte?

theoretisch könnte ich ja einfach:
WorkCalendar wc = new WorkCalendar();
anstatt über getInstance() oder macht dies technisch einen großen Unterschied? bzw. wo liegen hier Vor- und Nachteile?

Ich hoffe ich nerve nicht zu sehr... vielen dank für die ausführlichen antworten. werde mich mal genauer mit design patterns beschäftigen.
 
Zuletzt bearbeitet:

Der Müde Joe

Top Contributor
Unterschied gibt es keinen. Ist hingegen dieses Pattern:
Fabrikmethode ? Wikipedia

klappt bei mir ohne Probleme:
Java:
import java.util.GregorianCalendar;


public class WorkCalendar extends GregorianCalendar {

	public WorkCalendar(int year, int month, int day, int hours, int minutes) {
		super(year, month, day, hours, minutes);
	}

	public static WorkCalendar getInstance() {
		return new WorkCalendar(0, 0, 0, 0, 0);
	}
}
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
P Problem mit Calendar.getDisplayName() Java Basics - Anfänger-Themen 8
B Calendar Java Basics - Anfänger-Themen 5
N Erste Schritte Calendar.DAY_OF_YEAR Java Basics - Anfänger-Themen 3
D Unterschied Date - Calendar Java Basics - Anfänger-Themen 1
I iCal Calendar mit Password und Username Java Basics - Anfänger-Themen 0
E Gregorian Calendar übergibt falschen Wochentag Java Basics - Anfänger-Themen 2
P Tag der Zeitumstellung Sommer->Winterzeit (Java Calendar) Problem Java Basics - Anfänger-Themen 5
S Calendar Neujahr Java Basics - Anfänger-Themen 10
T Calendar Methode roll(); Java Basics - Anfänger-Themen 2
J Calendar holidays Java Basics - Anfänger-Themen 4
L Datediff calendar Java Basics - Anfänger-Themen 3
D Java Date/Calendar Problem Java Basics - Anfänger-Themen 4
T Heutiges datum OHNE Calendar? Java Basics - Anfänger-Themen 9
M Calendar-Prüfung funktioniert nicht korrekt Java Basics - Anfänger-Themen 6
K Java Calendar Time Java Basics - Anfänger-Themen 10
N Fehler Calendar Java Basics - Anfänger-Themen 4
B Klassen Gregorian Calendar Java Basics - Anfänger-Themen 3
G Gregorian Calendar Eingabeprüfung Java Basics - Anfänger-Themen 4
M Calendar add-Funktion Java Basics - Anfänger-Themen 2
M Probleme mit Calendar Java Basics - Anfänger-Themen 9
0 Calendar - komme nicht weiter mit add Java Basics - Anfänger-Themen 2
lumo Datentypen Calendar to string und retour? Java Basics - Anfänger-Themen 4
S Calendar -- today Java Basics - Anfänger-Themen 4
N verständnisfrage java.util.Calendar Java Basics - Anfänger-Themen 4
W String zu Calendar parsen Java Basics - Anfänger-Themen 4
B Fehlermeldung für Calendar Java Basics - Anfänger-Themen 20
H Calendar rechnet möglicherweise falsch Java Basics - Anfänger-Themen 6
N Calendar Probleme Java Basics - Anfänger-Themen 5
G Gregorian Calendar aus toString() Ausgabe wiederherstellen Java Basics - Anfänger-Themen 4
A calendar Java Basics - Anfänger-Themen 6
K java.util.Calendar und Objekt Java Basics - Anfänger-Themen 7
C Problem Date / Calendar Java Basics - Anfänger-Themen 3
Paule Problem mit Date und Calendar Java Basics - Anfänger-Themen 3
W Gregorian Calendar Java Basics - Anfänger-Themen 5
S Calendar.set Time, Ermittlung der Anzahl Tage fehlerhaft Java Basics - Anfänger-Themen 9
G Probleme mit Konvertierung und Substraktion im Calendar Java Basics - Anfänger-Themen 4
S Konvertieren von Gregorian Calendar nach Date ? Java Basics - Anfänger-Themen 6
L Gregorian Calendar Problem Java Basics - Anfänger-Themen 7
S Calendar.set Methode Java Basics - Anfänger-Themen 4
R App soll selbstständig reagieren, anstatt via Models Java Basics - Anfänger-Themen 0
T jOptionPane zum schließen von Fenster, wie "Ja" und "Nein" anstatt Yes und No Java Basics - Anfänger-Themen 2
I Output BigDecimal anstatt double / Problem beim Rechnen Java Basics - Anfänger-Themen 16
I Format Problem mit Wert - bekomme 0,10 anstatt 10,00 Java Basics - Anfänger-Themen 6
P Hashmap anstatt LinkedList? Java Basics - Anfänger-Themen 6
T GUI anstatt Bild schwarzes Rechteck gespeichert Java Basics - Anfänger-Themen 0
U buttonarray[this] anstatt buttonarray[index] ? Java Basics - Anfänger-Themen 12
M Anstatt 1 int Rückgabewert, mehrere Rückgaben mit Arraylist Java Basics - Anfänger-Themen 8
J Array anstatt Begriffe als Indizes Java Basics - Anfänger-Themen 14
I Erste Schritte while anstatt for, if und break Java Basics - Anfänger-Themen 10
K Was benutzen anstatt this? Java Basics - Anfänger-Themen 9
K Polymorphie Objektreferenz als Superklasse anstatt des Objekttypes Java Basics - Anfänger-Themen 12
B List list - anstatt ArrayList list = new ArrayList Java Basics - Anfänger-Themen 10
D JTextField anstatt Jbuttons Java Basics - Anfänger-Themen 9
A POI Einlesen Excel Workbook aus BLOB oder von URL anstatt aus Filesystem ? Java Basics - Anfänger-Themen 3
dl85hej Zeitsitschleife anstatt Timer Java Basics - Anfänger-Themen 5
B String.equals(Object) anstatt "=" Java Basics - Anfänger-Themen 3
Horst79 Temp Datei cachen anstatt physikalische Datei im root Verz? Java Basics - Anfänger-Themen 8
G start-oder paint-Methode anstatt Event-Handling-Methode? Java Basics - Anfänger-Themen 3
S StringBuffer anstatt += Java Basics - Anfänger-Themen 8
C Servlets: doPost() etc. anstatt service() Java Basics - Anfänger-Themen 4
C Anstatt Spalte, Zeile mit Comparator sortieren . Java Basics - Anfänger-Themen 5
D contains bei JTextArea anstatt bei JTextField Java Basics - Anfänger-Themen 8
H private anstatt public Java Basics - Anfänger-Themen 2
C Wie kann ich Grichische Buchstaben ausgeben anstatt latein? Java Basics - Anfänger-Themen 2
M Ausgabe in String anstatt auf Stream Java Basics - Anfänger-Themen 17

Ähnliche Java Themen

Neue Themen


Oben