Show dates before 1970

benhaze

Mitglied Platinum
Hallo liebe Entwicklergemeinde!
So, ich frage mal hier mal unter *Java Grundlagen* , da irgendein Kelch total an mir vorbeigezogen ist. :-(

Auf der Seite http://www.java2s.com habe ich unter *Java » Development Class » Calendar Date*, zufällig eine Methode entdeckt, mit der Beschreibung:
=> Show dates before 1970

Ich musste mir natürlich unbedingt anschauen, bei welchen *Problem* mir diese Methode wohl helfen mag.
(Irgendwie war mir gar nicht bewusst, das es mit *Dates before 1970* Probleme gibt? [und ich hab doch in den letzen Monaten so oft java.util.Date benutzt :confused:])

Nun denn, so sieht der essentielle Teil der Methode aus:
Java:
    Calendar c = new GregorianCalendar(1918, 10, 11);
    System.out.println(c.get(Calendar.DAY_OF_MONTH) + " "
        + c.get(Calendar.MONTH) + ", " + c.get(Calendar.YEAR) + " "
        + c.get(Calendar.ERA));
Ziemlich *fragwürdige* Methode, dachte ich mir.(aber ich dachte ja auch, das Date keine Probleme mit Daten vor 1970 hat...)

Dann habe ich weiter recherchiert...
(Es kann doch nicht sein, so selten [nahezu noch nie] davon gelesen zu haben, von diesen Problem...und ich es irgendwie noch nie hatte [oder habe ich es und weis es nur nicht?])
...und folgendes gefunden:
http://www.tutorialhero.com/tutorial-70-java_date.php

dort steht (in Fett):
Note : In the date class, dates before January 1, 1970 are generally not usable.

(Nach zig tausend Java-Zeilen, lese ich aufeinmal soetwas. Was habe ich da nicht mitbekommen?)

Ich habe anschließend direkt ein paar Tests gestartet. (mit Java 1.6)
Mir ist dabei nichts ungewöhnliches aufgefallen (vermutlich auch, weil mein Horizont zu beschränkt ist?!)

Kann mir bitte jemand diesen Sachverhalt zu erläutern. (ich finde dazu wirklich fast gar nichts!)
(Ich dachte zuerst es könnte evtl. in Java 1.0 oder so gewesen sein (kenne Java eigentlich erst seit 1.4) aber das Datum (im Kommentar der Klasse) hatte mich irritiert, von 2004)

Vielen Dank!
 
Hallo!

Der 1.1.1970 ist der Beginn der Unix-Zeitrechnung.
Dieses magische Datum sollte Dir als Programmiere eigentlich öfter über den Weg laufen.
Typisches Beispiel wo man Probleme bekommen kann, sind z.B. Geburtsjahre bzw. historische Jahreszahlen.

Ob, und wie weit, sich dieses Problem in Java umgehen lässt, kann ich Dir nicht sagen (kenne mich mit Java nicht aus).

Gruss Dr Dau
 
Hallo!
Der 1.1.1970 ist der Beginn der Unix-Zeitrechnung.
Dieses magische Datum sollte Dir als Programmiere eigentlich öfter über den Weg laufen.

Ja, das ist mir bekannt.
(Das war auch nicht meine Frage)

Mir ging es um die Aussage:
Note : In the date class, dates before January 1, 1970 are generally not usable.

Ich konnte diese Aussage einfach nicht bestätigen.
(auch nicht aus technischer Sicht)
 
Dort wird erklärt, dass man das Datum auch vor 1970 ausgeben kann indem man einen Negativen Timestamp nutzt.
Ja, so ist es auch.
Darum verstehe ich auch nicht, worauf diese 2 Websites hinauswollen.

Website 1 schreibt über die Klasse java.util.Date:
Note : In the date class, dates before January 1, 1970 are generally not usable.

Website 2 bietet eine spezielle Methode für ein Problem an, welches mir nicht bekannt ist:
Show dates before 1970

Ich frage mal anders, da ich denke meine Frage wird nicht ganz verstanden:

Wer von euch hatte schonmal Probleme mit Daten vor 1970?
(Und in welchem Zusammenhang?)

Danke!
 
Mal eine ganz andere Frage, für welchen Zweck versuchst du eine Methode zu finden.

Angenommen du suchst eine Methode um den Wochentag eines bestimmten Datums herauszufinden, dann gibt es zahlreiche Formeln dafür, die man benutzen könnte. Ich glaube eine davon war z.B. die Gaußsche Wochentagsformel.

Ein weiterer Anwendungsfall, der mir einfällt ist die Berechnung von beweglichen Feiertagen. Soweit ich weiß, sind alle christliche Feiertage und haben den gleichen "Abstand" voneinander. Es gibt min. 2 Formeln, die den Ostersonntag berechnen (z.B. Gaußsche Osterformel).

Ebenso gibt es Formeln für ähnliche Anwendungsfälle, es ist vielleicht umständlicher als mit Funktionen der Calender-Klasse, dafür sind diese in der Regel allgemein gültig.
 
Hallo!

Mal eine ganz andere Frage, für welchen Zweck versuchst du eine Methode zu finden.

Angenommen du suchst eine Methode um den Wochentag eines bestimmten Datums herauszufinden, dann gibt es zahlreiche Formeln dafür, die man benutzen könnte. Ich glaube eine davon war z.B. die Gaußsche Wochentagsformel.

Ein weiterer Anwendungsfall, der mir einfällt ist die Berechnung von beweglichen Feiertagen. Soweit ich weiß, sind alle christliche Feiertage und haben den gleichen "Abstand" voneinander. Es gibt min. 2 Formeln, die den Ostersonntag berechnen (z.B. Gaußsche Osterformel).

Ebenso gibt es Formeln für ähnliche Anwendungsfälle, es ist vielleicht umständlicher als mit Funktionen der Calender-Klasse, dafür sind diese in der Regel allgemein gültig.
Ohne dir nahe treten zu wollen, hast du überhaubt meine Beiträge gelesen?:confused:
Ich suche keine Methode!
Ich suche ausschließlich eine Erklärung für folgende Aussage:
In the date class, dates before January 1, 1970 are generally not usable.

NOCHMAL:
Ich habe keine Probleme mit java.util.Date!
Auch nicht mit dem Calendar.
Ich habe nur gelesen (siehe (Web-)Links) das man java.util.Date und Daten (Plural Datum) vor 1970 nicht benutzen kann.
Ich wollte nur eine Erklärung warum das so sein sollte.
Weil mir bisher keine Probleme mit Daten vor 1970 aufgefallen sind.
Mehr nicht.

Ich will nichts berechnen und suche auch keine Methoden.Auch weiss ich was es mit dem 01.01.1970 auf sich hat.

Ben
 
In dem von djbergo genannten Link habe ich eine Stelle gefunden, welche die ursprüngliche Konfusion wahrscheinlich erklärt.
Es gibt Beschränkungen im Wertebereich der Programmiersprachen-Funktionen.
Z.B. in Java akzeptiert Date 290 Millionen Jahre B.C. (vor Christi) bis 290 Millionen Jahre A.D. (nach Christi), aber GregorianCalendar akzeptierte vor JDK 1.2 kein Datum früher als 4713 B.C.
Noch gravierender: 2038-01-19 sind 2^31 Sekunden seit 1970-01-01 vergangen und damit endet der Wertebereich des unter Unix und Windows bei 32-Bit-Programmierung in C üblichen time_t.
Du kannst ja spasseshalber mal ausprobieren, was ein 32-Bit-Unix-Rechner tut, wenn du auf ihm ein entsprechendes Java-Programm startest. Setze z.B. das aktuelle Datum auf das Jahr 2040.
Ob Datumsangaben problematisch sind, kannst du z.B. testen, wenn du dir für die Jahre 1890-1910 ausgeben lässt, welches Datum der Tag vor dem ersten März hat. 1900 sollte dann 28.Februar angezeigt werden, weil dies kein Schaltjahr war! Oder du lässt dir die Wochentage zu bestimmten Datumsangaben von Date oder Calendar abfragen und ausgeben, und vergleichst sie dann mit dem Wochentag, den du mit der Doomsday-Methode berechnet hast.
 
Zurück