GregorianCalender AM und PM

Steven85

Mitglied
Hallo zusammen,

mein Problem ist folgendes. Ich versuche einen JSpinner zu bauen mit der Angabe von Stunden, Minuten und Sekunden. Folgendermaßen sieht das aus.

Java:
final JSpinner spinLaenge = new JSpinner();
spinLaenge.setModel(new javax.swing.SpinnerDateModel());
spinLaenge.setEditor(new javax.swing.JSpinner.DateEditor(spinLaenge, "HH:mm:ss"));
Calendar cal = GregorianCalendar.getInstance();
cal.set(GregorianCalendar.HOUR_OF_DAY, 0);
cal.set(GregorianCalendar.MINUTE, 0);
cal.set(GregorianCalendar.SECOND, 0);
spinLaenge.setValue(cal.getTime());

Wenn ich jetzt da z.B. 00:01:00 einstelle und den Spinner abfrage, bekomm ich 12:01:00.
Das ganze passiert immer erst nach 12 Uhr. Ich hoffe das ihr mir weiter helfen könnt damit ich das
abgefragt bekomme was ich auch eingebe.
 
Zuletzt bearbeitet von einem Moderator:

Steven85

Mitglied
Ich meine mit Prom natürlich Problem. Sry für den Fehler. [edit SlaterB: eh aus Titel gestrichen ;) ]
 
Zuletzt bearbeitet von einem Moderator:
B

bone2

Gast
mal calendar objekt in sysout gepackt? api angeguckt?
Java:
        Calendar cal = Calendar.getInstance();
        System.out.println(cal.getTimeInMillis());
        cal.set(Calendar.AM_PM, 0);
        System.out.println(cal.getTimeInMillis());
 
B

bone2

Gast
mit
Code:
cal.set(Calendar.AM_PM, Calendar.AM);
kansnt du den aktuellen Calendar eben auf Am umschalten, wenn du den ganz 0 setzenwillst, reicht auch ein einfaches
Code:
cal.clear();
 
S

SlaterB

Gast
> Wenn ich jetzt da z.B. 00:01:00 einstelle und den Spinner abfrage, bekomm ich 12:01:00.

schade dass du auf ein vollständiges Programm verzichtet hast,
ich sehe beim Kopieren des Codes in Dummy-JFrame nur zwei Knöpfe um Stunden zu verstellen und erhalte dann bei Ausgabe von der Value() z.B.
> Thu Jan 01 02:00:00 CET 1970

Problem für mich nicht nachvollziebar
 

Steven85

Mitglied
> Wenn ich jetzt da z.B. 00:01:00 einstelle und den Spinner abfrage, bekomm ich 12:01:00.

schade dass du auf ein vollständiges Programm verzichtet hast,
ich sehe beim Kopieren des Codes in Dummy-JFrame nur zwei Knöpfe um Stunden zu verstellen und erhalte dann bei Ausgabe von der Value() z.B.
> Thu Jan 01 02:00:00 CET 1970

Problem für mich nicht nachvollziebar


Was meinst du mit vollständiges Programm?
 

Steven85

Mitglied
Java:
// JSpinner definieren
final JSpinner spinLaenge = new JSpinner();
spinLaenge.setModel(new javax.swing.SpinnerDateModel());
spinLaenge.setEditor(new javax.swing.JSpinner.DateEditor(spinLaenge, "HH:mm:ss"));
Calendar cal = GregorianCalendar.getInstance();
cal.set(Calendar.AM_PM, Calendar.AM); // Ob AM oder PM, immer Stunde auf 12
cal.clear(); // Auf 0 setzen
spinLaenge.setValue(cal.getTime());
pTitel.add(spinLaenge); // Zum Panel hinzufügen

// Daten abfragen
Date date = (Date) spinLaenge.getValue(); // Um die Zeit aus dem Date zu Filtern
SimpleDateFormat sdfTime = new SimpleDateFormat("hh:mm:ss");
String spinLaenge = sdfTime.format(date); // soll auf 00:00:00 stehen zu Anfang

Ich bekomme immer wieder 12:00:00 zu Anfang.
 

jgh

Top Contributor
wenn du SimpleDateFormat richtig anwenden würdest, sollte das auch klappen ;)

Code:
SimpleDateFormat sdfTime = new SimpleDateFormat("[B][SIZE="4"]HH[/SIZE][/B]:mm:ss");

h Hour in am/pm (1-12)
H Hour in day (0-23)

btw, das wäre ein KSKB für deinen Fall, oder auch ein "vollständiges" Programm...so ist man gezwungen das Problem auf ein kleines und kurzes Codestück zu reduzieren:

Java:
public static void main(String[] args) {
		JFrame f = new JFrame();
		f.setSize(150, 150);
		f.setLocationRelativeTo(null);
		f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		// JSpinner definieren
		final JSpinner spinLaenge = new JSpinner();
		spinLaenge.setModel(new javax.swing.SpinnerDateModel());
		spinLaenge.setEditor(new javax.swing.JSpinner.DateEditor(spinLaenge,
				"HH:mm:ss"));
		Calendar cal = GregorianCalendar.getInstance();
		cal.set(Calendar.AM_PM, Calendar.AM); // Ob AM oder PM, immer Stunde auf
												// 12
		cal.clear(); // Auf 0 setzen
		spinLaenge.setValue(cal.getTime());

		// Anfang
		f.add(spinLaenge);

		JButton b = new JButton("System.out.println");
		b.addActionListener(new ActionListener() {

			@Override
			public void actionPerformed(ActionEvent e) {
				// TODO Auto-generated method stub
				System.out.println(spinLaenge.getValue());
			}
		});
		f.add(b, BorderLayout.SOUTH);
		f.setVisible(true);
	}
 

Steven85

Mitglied
Habe den Fehler endeckt.
Beim Afragen mit getvalue() bekommt man ja ein Object.
Da habe ich beim erneuten benutzen des SimpleDateFormat die ganze Zeit immer noch hh statt HH stehen gehabt.
 
S

SlaterB

Gast
'Habe den Fehler endeckt.' brauchst du nicht mehr groß schreiben, dieser Fehler wurde hier ja schon genannt,

und wie man sieht um mich selbst zu loben ;) :
einfach das Programm/ mehr Code posten und in diesem Fall in 10 Min., ein sehr guter Wert, ist der Fehler schnell gefunden,
während vorher wenig erreicht wurde

das hättest du vielleicht schon Gestern, 14:33 haben können, wenn nur von Anfang an genug gepostet,
dass du den Fehler letzlich auch selber findest ist sehr beruhigend, ein Tag ist inzwischen aber fast vergangen
 

Ähnliche Java Themen

Neue Themen


Oben