Marko: Interessantes Programmierproblem mit dem Date Objekt

Hallo Forum,

ich brauche ein vom Objekt Date abgeleitetes Objekt, das mir die folgenden Funktionen liefert:

long getHour()

liefert den long Wert für den Beginn der Stunde dieses Dateobjektes.
(Das bedeutet, Date ist der Zeitpunkt: 4.10.2000 15.47 Uhr, und getHour gibt mir den long Wert für 4.10.2000 15.00 Uhr zurück).

Das gleiche für

long getDay()
(im Beispiel der long Wert für 4.10.2000 0.00 Uhr)

long getMonth()
(long Wert für 1.10.2000 0.00 Uhr )

Hat jemand von Euch eine Idee, wie man diese Funktionen am geschicktesten implementiert, oder hat vielleicht schon mal jemand sowas geschrieben ?

vielen Dank und viele Grüsse

Marko

  1. Hallo Marko,

    diese Funktionen bietet das Date-Objekt bereits.

    Wenn
      Date meindatum = new Date(...);

    dann liefert
      meindatum.getHours();
    die Stunde des von meindatum repräsentierten Datums und
      meindatum.getMonth();
    den entsprechenden Monat.

    So sollte es auch in der Java-Dokumentation von Sun stehen. Übrigens wird empfohlen, Date nicht mehr zu verwenden. Grund ist unteranderem ein kleines Jahr2000 Problem. Stattdessen sollte man sich GregorianCalendar bedienen.

    Wenn Du den Wert unbedingt als long-Wert haben willst, dann läßt er sich mit
      (long)meindatum.getHours();
    bzw.
      (long)meindatum.getMonth();

    konvertieren. Ich nehme an, Du suchtest eher nach dieser Konvertierungsmöglichkeit, oder?
    Dieser "Trick" funktioniert übrigens im Prinzip mit allen Datentypen.

    Gruß
      Michael

    1. Hallo Michael,

      nein, das ist nicht was ich brauche, denn

      dann liefert
        meindatum.getHours();
      die Stunde des von meindatum repräsentierten Datums

      ja aber es liefert eben z.B. 12 für 12 Uhr, aber ich brauche den long wert des Stundenbeginns des Datums, also die Millisekunden seit 1970 bis zum Beginn der durch Date repräsentierten Stunde, und nicht die Uhrzeit.

      meindatum.getMonth();
      den entsprechenden Monat.

      Genauso, ich brauch nicht 1-12 sondern die jeweiligen Millisekunden Werte seit 1970.

      Gruss

      Marko

      1. Hallo Marko,

        ich schlage zunächst vor, Du feilst etwas an der Formulierung Deiner Fragen. :-)
        Die Bezeichnung 'long-Wert' assoziiert mir etwas anderes als "Millisekunden seit 1970".
        Der Antwortende wendet schließlich Zeit auf für die Beantwortung von Fragen. Dieses 'sich Zeit nehmen' kann man ja auch von Fragenden erwarten.

        Aber ok. Zurück zum eigentlichen Thema. :-)
        Auch für dieses Problem brauchen wir nicht zwingend eine neue Klasse.
        Bleiben wir bei 'meindatum'.
        Die wunderbaren setXXX-Methoden ändern nämlich glücklicherweise nur die entsprechenden Felder und lassen alle anderen angaben unangetastet.
        mit
          meinDatum.setMinutes(0);
          meinDatum.setSeconds(0);
        bekommen wir nach
          meinDatum.getTime()
        den gewünschten 'long-Wert' für die aktuelle Stunde.
        Analog verfährt man mit dem aktuellen Tag, wobei man eben ein paar mehr Werte zurücksetzt.

        Hilft das vielleicht weiter?`

        Grüße
           Michael

        1. Hallo Michael,

          Der Antwortende wendet schließlich Zeit auf für die Beantwortung von Fragen. Dieses 'sich Zeit nehmen' kann man ja auch von Fragenden erwarten.

          Also wenn Du meine Frage genau liest hab ich ein Beispiel mitgeliefert:

          (Das bedeutet, Date ist der Zeitpunkt: 4.10.2000 15.47 Uhr, und getHour gibt mir den long Wert für 4.10.2000 15.00 Uhr zurück).

          Ich dachte damit wäre deutlich ausgedrückt wo ich hinwollte.

          meinDatum.setMinutes(0);
            meinDatum.setSeconds(0);
          bekommen wir nach
            meinDatum.getTime()
          den gewünschten 'long-Wert' für die aktuelle Stunde.
          Analog verfährt man mit dem aktuellen Tag, wobei man eben ein paar mehr Werte zurücksetzt.

          Jo das war was ich wollte, vielen Dank. Hm, irgendwie so einfach, dass es mir fast peinlich ist.

          Gruss

          Marko

          1. Hallo Marko,

            Also wenn Du meine Frage genau liest hab ich ein Beispiel mitgeliefert:

            (Das bedeutet, Date ist der Zeitpunkt: 4.10.2000 15.47 Uhr, und getHour gibt mir den long Wert für 4.10.2000 15.00 Uhr zurück).

            Ich dachte damit wäre deutlich ausgedrückt wo ich hinwollte.

            Für mich hat es nicht ganz gereicht. Die Formulierung mit den Millisekunden wäre mir doch lieber gewesen. :-)

            Jo das war was ich wollte, vielen Dank. Hm, irgendwie so einfach, dass es mir fast peinlich ist.

            Ja, richtig so. Schäm Dich :-)))

            Gruß
              Michael