Calendar bzw. GregorianCalendar Klasse

Status
Nicht offen für weitere Antworten.

chehilbi

Mitglied
Hallo zusammen,

ich verzweifele gerade an der Calendar bzw. GregorianCalender Klasse. Ich erzeuge zwe GregorianCalendar
Objekte. Dem timestamp Objekt weisse ich eine feste Sekundenanzahl zu mit Hilfe des zweiten Objektes.
Danach mach ich ein sleep von 5 Sek und geben die beiden Sekundenzahlen aus. Beide sind seltsamerweise
gleich. Das kann doch nicht sein. Die Sekunden vom cal Objekt müssten doch 5 Sek weiter fortgeschritten sein.
Sinn und Zweck soll eine Art Timestamp sein. Kann mir jemand helfe? Danke!

[HIGHLIGHT="Java"]Calendar timestamp = new GregorianCalendar();
Calendar cal = new GregorianCalendar();

timestamp.set(Calendar.SECOND, cal.get(Calendar.SECOND));

try {
Thread.sleep(5000);
}
catch(Exception e) {
System.out.println(e);
}

System.out.println("timestamp:" + timestamp.get(Calendar.SECOND));
System.out.println("aktuelle Zeit:" + cal.get(Calendar.SECOND));[/HIGHLIGHT]
folgende Ausgabe:

Code:
timestamp:40
aktuelle Zeit:40
 
Zuletzt bearbeitet von einem Moderator:
Ich glaube er nimmt die Zeit (Sekunden), wo das GregorianCalendar Objekt instanziiert wird.
Versuch mal folgendes:

Code:
		GregorianCalendar cal1 = new GregorianCalendar();
		System.out.println(cal1.get(Calendar.SECOND));

		try {
			Thread.sleep(2000);
		} catch (Exception e) {
			System.out.println(e);
		}

		GregorianCalendar cal2 = new GregorianCalendar();
		System.out.println(cal2.get(Calendar.SECOND));
 
Zuletzt bearbeitet:
ich denke du hast recht. Die Uhrzeit wird beim initialisieren des Objektes gesetzt. Dann ist es ja gar
nicht möglich mit nur einem Objekt, immer wieder die aktuelle Uhrzeit abzurufen. Ist das möglich.
Oder gibt es eine Methode um die Uhrzeit neu zu laden?

[HIGHLIGHT="Java"]GregorianCalendar cal1 = new GregorianCalendar();
System.out.println(cal1.get(Calendar.SECOND));

try {
Thread.sleep(3000);
} catch (Exception e) {
System.out.println(e);
}

GregorianCalendar cal2 = new GregorianCalendar();
System.out.println(cal2.get(Calendar.SECOND));

System.out.println(cal1.get(Calendar.SECOND));[/HIGHLIGHT]
Ausgabe:

Code:
55
58
55
 
Zuletzt bearbeitet von einem Moderator:
Ja,

cal.setTime(new Date()); //Erzeugt leider immer in neues Date-Object

daher halte ich es für besser:

cal.setTimeInMillis(System.currentTimeLillis())
zu benutzen.


Bernd
 
was ich jetzt noch nicht ganz verstehe ist die Vererungsstruktur von GreogoriaCalendar. Gregorian
Calendar erbt ja von der abstrakten Klasse Calendar. Wenn man sich den folgende Link anschaut,
sieht man in der Klasse Calendar eine Vielzahl von static Attributen und Methonden die vererbt werden.

Class java.util.Calendar

Wenn diese static sind, wie können dann die GregorianCalendar unterschiedelich Werte annehmen???
 
statische Methoden werden nicht vererbt, nehmen nicht 'unterschiedliche Werte an',
wie kommst du zu dieser Annahme?
 
also static methoden und attribute werden nicht vererbt 🙂 wie peinlich, dass kommt davon wenn man ein halbes jahr c prozedual programmiert 🙂
 
Wenn du nur einen Timestamp ausgeben willst, warum dann der Calendar? System.currentTimeMillis() und System.nanoTime()
 
würde natürlich auch gehe, aber mit dem Calendar kann ich das Datum in jedem gewünschten Format darstellen bzw. weitergeben z.B. an eine DB!

System.out.println(System.currentTimeMillis());
 
bzw. weitergeben z.B. an eine DB!... wops nein!
Code:
      GregorianCalendar cal = null; //was auch immer
      
      Connection con = null; //was auch immer
      PreparedStatement smt = con.prepareStatement("dein query mit ? wo das datum hin gehört");
      smt.setDate(1, new java.sql.Date(cal.getTime().getTime()));
besser prepared statemens verwenden...
 
Kurz noch die Faustregeln:
  • java.util.Date zum festhalten eines konkreten Datums mit Uhrzeit
  • System.currentTimeMillis(), System.nanoTime(), new Date() zum abfragen der aktuellen Zeit
  • DateFormat, SimpleDateFormat, MessageFormat zum formatieren von Daten
  • Calendar (normaler Weise nicht explizit: GregorianCalendar) zum Modifizieren eines Datums nach Kalender-Regeln (eine Woche vor, 3 Tage zurück, Minuten auf null setzen, ...)
Ebenius
 
Zuletzt bearbeitet:
Status
Nicht offen für weitere Antworten.

Zurück
Oben